为什么默认情况下不允许GET请求返回JSON?

Jed*_*dja 33 asp.net asp.net-mvc json

作为ASP.NET MVC 2 Beta 2更新的一部分,默认情况下不允许JSON GET请求.看来您需要在从控制器返回对象之前将JsonRequestBehavior字段设置为.JsonRequestBehavior.AllowGetJsonResult

public JsonResult IsEmailValid(...)
{
    JsonResult result = new JsonResult();

    result.Data = ..... ;
    result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

    return result;
}
Run Code Online (Sandbox Code Playgroud)

这背后的原因是什么?如果我使用JSON GET尝试进行远程验证,我应该使用不同的技术吗?

Chr*_*fer 23

DenyGet默认的原因是在MSDN上,链接到Phil Haack的博客以获取更多详细信息.看起来像一个跨站点脚本漏洞.


Ann*_*lle 8

默认情况下,HTTP GET被禁用,作为ASP.NET跨站请求伪造(CSRF/XSRF)保护的一部分.如果您的Web服务接受GET请求,那么它们可能容易受到第三方站点的攻击,这些站点通过<script />标记发出请求,并可能通过修改JavaScript setter来获取响应.

但值得注意的是,禁用GET请求不足以阻止CSRF攻击,也不是保护您的服务免受上述攻击类型影响的唯一方法.请参阅针对跨站点请求伪造的强大防御,以便对不同的攻击媒介及其如何防范它们进行详细分析.