一尘不染

为什么需要JsonRequestBehavior?

c#

为什么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所有东西“困扰”我们JsonResult。如果我想拒绝获取请求,则添加HttpPost属性。


阅读 295

收藏
2020-05-19

共1个答案

一尘不染

MVC默认情况下是DenyGet为了保护您免受涉及JSON请求的非常特定的攻击,从而改善了以下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版。

相关StackOverflow问题

对于最新的浏览器(从Firefox 21,Chrome 27或IE
10开始),这不再是一个漏洞。

2020-05-19