Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 什么';敏感信息';将JsonRequestBehavior设置为AllowGet时可能会被披露_Asp.net Mvc_Json_Security_Http Post_Http Get - Fatal编程技术网

Asp.net mvc 什么';敏感信息';将JsonRequestBehavior设置为AllowGet时可能会被披露

Asp.net mvc 什么';敏感信息';将JsonRequestBehavior设置为AllowGet时可能会被披露,asp.net-mvc,json,security,http-post,http-get,Asp.net Mvc,Json,Security,Http Post,Http Get,每次我在返回Json时从浏览器的地址栏测试新的URL(使用内置的MVC JsonResult帮助程序)时,我都会遇到同样的错误: 此请求已被阻止,因为在获取请求中使用此请求时,可能会向第三方网站披露敏感信息。要允许GET请求,请将JsonRequestBehavior设置为AllowGet 这一次,我想知道的是,一个GET请求暴露出一个post请求没有暴露出什么?默认情况下,ASP.NET MVC框架不允许您响应请求 带有JSON负载的GET请求,因为恶意用户有可能通过JSON劫持过程获得对负载

每次我在
返回Json
时从浏览器的地址栏测试新的
URL
(使用内置的
MVC JsonResult帮助程序
)时,我都会遇到同样的错误:

此请求已被阻止,因为在
获取请求中使用此请求时,可能会向第三方网站披露敏感信息。要允许
GET请求
,请将
JsonRequestBehavior
设置为
AllowGet


这一次,我想知道的是,一个
GET
请求暴露出一个
post
请求没有暴露出什么?

默认情况下,ASP.NET MVC框架不允许您响应请求 带有JSON负载的GET请求,因为恶意用户有可能通过JSON劫持过程获得对负载的访问权。您不希望在GET请求中使用JSON返回敏感信息

如果需要发送JSON来响应GET,并且不公开敏感数据,则可以通过将
JsonRequestBehavior.AllowGet
作为
JSON
的第二个参数传递给 方法

比如

  [HttpGet] //No need to decorate, as by default it will be GET
  public JsonResult GetMyData(){  
    var myResultDataObject = buildMyData(); // build, but keep controller thin
    // delegating buildMyData to builder/Query Builder using CQRS makes easy :)
    return Json(myResultDataObject, JsonRequestBehavior.AllowGet);
  }

下面是Phil Haack的一篇有趣的文章,关于为什么不将Json与GET方法一起使用

http://www.example.com/User/GetUser/32

返回一个JSON响应:

{“Name”:“John Doe”}
如果此方法仅接受POST请求,则只有向
AJAX请求时,内容才会返回到浏览器http://www.example.com/User/GetUser/32
使用POST方法。请注意,除非您已经实现,否则浏览器将保护来自向您发出此请求的其他域的数据

但是,如果您允许GET请求,并使用GET而不是POST发出类似于上述的AJAX请求,恶意用户可以通过在HTML中使用
脚本
标记将您的JSON包含在自己站点的上下文中。e、 g.在
www.evil.com


这个JavaScript对于
www.evil.com
应该是无用的,因为应该没有办法读取web方法返回的对象。但是,由于旧版本浏览器(如Firefox 3)中存在漏洞,JavaScript原型对象可能会被重新定义,并使
www.evil.com
能够读取方法返回的数据。这就是所谓的JSON劫持


请参阅,以了解防止这种情况发生的一些方法。但是,现代浏览器(Firefox、Chrome、IE)的更高版本并不存在这一问题。

在返回时,请使用以下内容:

return this.Json("you result", JsonRequestBehavior.AllowGet);

当我们想从MVC应用程序向客户机返回json对象时,我们应该在返回对象时显式指定JsonRequestBehavior.AllowGet。因此,我返回json数据,如下所示,以解决此问题:

    return Json(yourObjectData, JsonRequestBehavior.AllowGet);

您必须使用JsonRequestBehavior.AllowGet进行Json响应,如下所示:

return Json(YourObject, JsonRequestBehavior.AllowGet);

返回Json(“Success”,JsonRequestBehavior.AllowGet)

Nice post,但是如果在控制器中包含[Authorize]标记,则无需担心安全性。希望这段代码能帮助一些人,Json(returnMsg,JsonRequestBehavior.AllowGet)@Dhanuka777:不幸的是不是真的。如果该方法具有副作用(例如
www.example.com/User/DeleteUser/32
),则可能会发生攻击,因为请求将包括验证所需的cookie,因为它们来自受害者的机器<代码>[授权]
对于非常旧的浏览器,也不会使您免于此处详述的攻击-是用户自己访问
www.evil.com
,因此
www.evil.com
www.example.com
发出的请求将包含授权cookie。如果该操作有任何副作用,则不应使用GET方法——惯例是使用GET读取数据,所有影响操作的操作都应该使用POST、PUT、DELETE等。换句话说,我只是认为这个“敏感信息”错误消息具有误导性。如果开发人员按照应该使用的方式使用GET方法,那么一切都很好!:)我不确定这到底有什么区别。它不像post比get更受保护或加密。它仍然只是纯文本。我可以通过任何工具发送请求,就像post一样简单,但仍然可以获得相同的纯文本信息。恶意用户也可以在他们自己的站点上轻松编写任何服务器端代码来执行post。@Castrohenge:不,因为这需要设置一个头,而该头不会与脚本src.Great post的GET请求一起发送。你应该使用HTTPS的好理由。我认为HTTPS在这里没有帮助。这实际上是如何回答OP的问题的?这个答案所做的就是告诉每个人如何避开这个异常。是的,使用它。。这就像是用一个空的接球来试接球。不要使用这些家伙(在你了解风险之前)-告诉人们忽略安全警告而不至少解释后果是不负责任的-1.
return Json(YourObject, JsonRequestBehavior.AllowGet);