为什么Json Request Behavior需要?
Json Request Behavior
如果我想将HttpGet请求限制为我的操作,则可以使用[HttpPost]属性装饰该操作
HttpGet
[HttpPost]
例:
[HttpPost] public JsonResult Foo() { return Json("Secrets"); } // Instead of: public JsonResult Foo() { return Json("Secrets", JsonRequestBehavior.AllowGet); }
为什么还[HttpPost]不够? 为什么框架会用我们拥有的JsonRequestBehavior.AllowGet所有东西“困扰”我们JsonResult。如果我想拒绝获取请求,则添加HttpPost属性。
JsonRequestBehavior.AllowGet
JsonResult
HttpPost
MVC默认情况下是DenyGet为了保护您免受涉及JSON请求的非常特定的攻击,从而改善了以下HTTP GET可能性:在允许发生泄漏之前先考虑允许暴露的含义。
DenyGet
HTTP GET
与之相反,之后可能为时已晚。
注意:如果您的操作方法未返回敏感数据,则允许获取是安全的。
从我的Wrox ASP.NET MVC3书中进一步阅读
默认情况下,ASP.NET MVC框架不允许您使用JSON有效负载来响应HTTP GET请求。如果需要发送JSON以响应GET,则需要使用JsonRequestBehavior.AllowGet作为Json方法的第二个参数来明确允许该行为。但是,恶意用户有可能通过称为JSON劫持的过程来访问JSON负载。您不想在GET请求中使用JSON返回敏感信息。有关更多详细信息,请参见http://haacked.com/archive/2009/06/24/json- hijacking.aspx/上的 Phil帖子 或此SO帖子。 Haack,Phil(2011)。专业ASP.NET MVC 3(从程序员到程序员的近似编程器)(Kindle位置6014-6020)。约克 Kindle版。
默认情况下,ASP.NET MVC框架不允许您使用JSON有效负载来响应HTTP GET请求。如果需要发送JSON以响应GET,则需要使用JsonRequestBehavior.AllowGet作为Json方法的第二个参数来明确允许该行为。但是,恶意用户有可能通过称为JSON劫持的过程来访问JSON负载。您不想在GET请求中使用JSON返回敏感信息。有关更多详细信息,请参见http://haacked.com/archive/2009/06/24/json- hijacking.aspx/上的 Phil帖子 或此SO帖子。
Haack,Phil(2011)。专业ASP.NET MVC 3(从程序员到程序员的近似编程器)(Kindle位置6014-6020)。约克 Kindle版。
相关StackOverflow问题
对于最新的浏览器(从Firefox 21,Chrome 27或IE 10开始),这不再是一个漏洞。