解决MVC Jquery"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站"的问题

在ASP.NET MVC项目中,使用AJAX向控制器发送GET请求获取JSON数据时,出现这个错误:"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet"。

其实从返回的这个错误信息我们已经可以知道解决方法了,看这个信息:”因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站“,说明我们只要使用POST请求就可以了。后面的 “若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet”,这是提示第二种解决方法,就是设置JSON结果对象使其允许来自客户端的 HTTP GET 请求。以下为具体解决方法:

方法一 使用POST请求来调用控制器,从而获取JSON数据

原来发送ajax请求的前台JS代码如下:

/*可以看到type 设置的是GET请求*/
    $.ajax({
        type:‘GET‘,
        url: ‘/Home/AjaxGetJsonData‘,
        success: function (data) {
            alert(data);
        },
        error: function (error) {
            alert(error.responseText);
        }
    });

或者

 $.get(‘/Home/AjaxGetJsonData‘, null, function (data) {
        alert(data);
    });

那么我们只要将代码更改为下面两种任意一种就可以了:

 /*这里更改了ajax的参数 type 为POST ,发送POST请求就不会报错了*/
    $.ajax({
        type: ‘POST‘,
        url: ‘/Home/AjaxGetJsonData‘,
        success: function (data) {
            alert(data);
        },
        error: function (error) {
            alert(error.responseText);
        }
    });

或者

 /*也可以直接使用$.post方法进行ajax调用*/
    $.post(‘/Home/AjaxGetJsonData‘, null, function (data) {
        alert(data);
    });

方法二 在控制器返回的JSON结果对象里,设置JsonRequestBehavior.AllowGet(允许来自客户端的 HTTP GET 请求)

原来控制器中的代码如下:

public ActionResult AjaxGetJsonData()
    {
        string strData = "测试数据";
        return Json(strData);
    }

更改后的代码如下 :

 public ActionResult AjaxGetJsonData()
    {
        string strData = "测试数据";
        //这里我们设置了第二个参数JsonRequestBehavior为AllowGet
        return Json(strData,JsonRequestBehavior.AllowGet);
    }

我们可以看到在最后return Json(list, JsonRequestBehavior.AllowGet)中增加了第二个参数JsonRequestBehavior.AllowGet,默认是JsonRequestBehavior.DenyGet。之所以我们要在这里设置允许HTTP GET请求,是因为ASP.NET MVC为了预防一个网站信息泄漏的漏洞,所以默认是禁止客户端的HTTP GET 请求的。这是一个很出名的漏洞,名字是:JSON 劫持漏洞,所以我建议AJAX还是使用POST请求来获取数据,防止重要的信息被恶意攻击者窃取。

这里是MSDN文档的具体说明:允许 GET 请求可能会导致用户在某一网站中仍处于已登录状态时访问另一个网站。 这可能会生成导致信息泄漏的安全漏洞。有关此漏洞的信息,请参见 Phil Haack 的博客上的文章 JSON Hijacking,文章是英文的,我已经翻译,点击此链接:JSON劫持漏洞(详细讲解利用JSON从而进行数据劫持的漏洞攻防策略),另外还可以查看这篇文章:JSON劫持漏洞分析和攻防演练

时间: 2025-01-02 04:56:37

解决MVC Jquery"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站"的问题的相关文章

此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。

return new JsonResult() { Data = new { message = "成功!", }, JsonRequestBehavior = JsonRequestBehavior.AllowGet//加上这一句 };

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

解决“Internet Explorer已对此页面进行了修改,已帮助阻止跨站点脚本。”的“问题”

最近一直对网络安全知识比较感兴趣,目前在看的书是网上推荐的<Web应用安全权威指南>.这本书提供下载一个虚拟机镜像,运行这个虚拟机可以在电脑浏览器上做书中的实验. 第66页涉及到一个XSS的实验,正常的效果是执行JavaScript,弹出一个对话框.我在照做的时候IE提示"Internet Explorer已对此页面进行了修改,已帮助阻止跨站点脚本."(如图1). 我先将地址加入可信站点,没有作用.这时想到以前给公司设置OA系统时,不但需要加可信站点,还需要更改"

Spring MVC+JQuery+Google Map打造IP位置查找应用(2)

JSP+jQuery+Google Map展示最后的结果 在本文中,读者将学习到如何使用Spring MVC框架和jQuery及Google Map,制作一个简单的根据IP位置查找应用.用户可以在页面中输入一个IP地址,然后通过Google Map显示该IP所在的大概地理位置(注:本文使用的数据库是GeoLite). 最后我们在页面中,通过jQuery发送ajax请求调用Spring MVC控制层,然后将返回的结果展示在页面中,代码如下: <html> <head> <scr

[asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的

一.感慨 很久前看到一篇博客中有句话大致的意思是:“asp.net 程序性能低下的主要原因是开发人员技术参差不齐”,当时看到这句话不以为然,然而时间过的越久接触的.net 开发人员越多就越认同这句话:特别最近发现非常一个成熟的项目中有些问题非常非常影响性能,最终影响的是用户体验,借此给大家分享一下关于asp.net中一个小小的点,但对项目有很大的性能提升:以前觉得自己接触的项目少小,然后接触的项目越多,越大就会越发现,同样的问题依旧存在: 二.先从最简单的asp.net mvc例子说起 1.Co

检测jQuery.js是否已加载的判断代码

转载自http://www.jb51.net/article/27185.htm 测类.方法.变量或属性是否已存在,这是Javascript编程基础知识.在这里我们就是要检测jQuery()或$()函数是否存在 当然,该方法不局限于jQuery的检测,对与任何Javascript变量或函数都是通用的. 当前网页加载jQuery后,jQuery()或$()函数将会被定义,所以检测jQuery是否已经加载存在以下2种方法: 方法1: 复制代码代码如下: if (jQuery) { // jQuery

调用web service出现“请求被中止: 请求已被取消。”

在制作(www.helpqy.com)的后台时,使用StreamWrite向httpwebrequest.getrequeststream中写入Post数据后,一调用httpwebresponse.getresponsestream就出现“请求被中止: 请求已被取消.”的错误,在网上查阅发现只要把contentlength屏蔽掉就能解决问题.后面想了一下原因,是由于前面的streamwriter没有很干净的写完数据流导致后续操作异常.后面还是保留了contentlength,但是不使用Strea

解决MVC中JSON字符长度超出限制的异常

解决MVC中JSON字符长度超出限制的异常 解决方法如下: http://stackoverflow.com/questions/4155014/json-asp-net-mvc-maxjsonlength-exception 解决MVC中JSON字符长度超出限制的异常,布布扣,bubuko.com

iis设置Gzip后,无后缀的url无法压缩解决 MVC iis GZIP

<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/gzip"        HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"        HcCreateFlags="1"        HcDoDynamicCompression="TRUE"        HcDoOnDema