なぜJson Request Behavior
必要なのでしょうか?
HttpGet
アクションへのリクエストを制限したい場合は、アクションを[HttpPost]
属性で装飾することができます。
例:
[HttpPost]
public JsonResult Foo()
{
return Json("Secrets");
}
// Instead of:
public JsonResult Foo()
{
return Json("Secrets", JsonRequestBehavior.AllowGet);
}
なぜ[HttpPost]
十分ではないのでしょうか?
フレームワークが、私たちが持っているJsonRequestBehavior.AllowGet
for everyJsonResult
で私たちを「悩ませる」のはなぜでしょうか。 get リクエストを拒否したい場合は、属性を追加しますHttpPost
。
ベストアンサー1
MVC はデフォルトで、 JSON リクエストに関連する非常に特殊な攻撃からユーザーを保護し、攻撃が発生する前にそのDenyGet
影響を考慮する可能性を高めます。HTTP GET
これは、後になってからでは手遅れになる可能性がある場合とは対照的です。
注: アクション メソッドが機密データを返さない場合は、取得を許可しても安全です。
私のWrox ASP.NET MVC3の本からさらに読む
デフォルトでは、ASP.NET MVC フレームワークでは、HTTP GET 要求に JSON ペイロードで応答することはできません。GET に応答して JSON を送信する必要がある場合は、Json メソッドの 2 番目のパラメータとして JsonRequestBehavior.AllowGet を使用して、動作を明示的に許可する必要があります。ただし、悪意のあるユーザーが JSON ハイジャックと呼ばれるプロセスを通じて JSON ペイロードにアクセスできる可能性があります。GET 要求で JSON を使用して機密情報を返すことは避けてください。詳細については、Phil の投稿を参照してください。http://haacked.com/archive/2009/06/24/json-hijacking.aspx/またはこのSOの投稿。
Haack, Phil (2011)。『Professional ASP.NET MVC 3 (Wrox Programmer to Programmer)』(Kindle の位置 6014-6020)。Wrox。Kindle 版。
関連する StackOverflow の質問