在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劫持漏洞分析和攻防演练

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

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

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

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

    1.问题描述 mvc从一个路径获取所有的图片信息,ajax方法如下: function getimages(day) { var year = $("#selYear").val( ...

  3. 解决git提交敏感信息(回退git版本库到某一个commit)

    解决git提交敏感信息(回退git版本库到某一个commit) Fri 07 June 2013 git是一个很好的版本库, 现在很多人用它, 并在github上创建项目, 相信大家都有过将敏感信息提 ...

  4. (技术分享) 解决 Firefox 显示“已阻止载入混合活动内容”的问题

    (摘自http://blog.aizhet.com/Windows/18415.html) 从 Firefox 18 开始,如果 HTTPS 页面中包含非加密的 HTTP 内容,浏览器会在控制台输出警 ...

  5. WCF 添加服务引用 HTTP 请求已超过为 00:00:00 分配的超时。为此操作分配的时间可能是较长超时

    今天在用公司的笔记本引用WCF的时候,处于一直等待的过程,一直在下载信息,一直等了很长时间,弹出了一个消息 下载“http://ip:8085/xxxxx/xxxxx/mex/$metadata”时出 ...

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

    在制作(www.helpqy.com)的后台时,使用StreamWrite向httpwebrequest.getrequeststream中写入Post数据后,一调用httpwebresponse.g ...

  7. Oracle APEX 5.1 with Ords 17 in Tomcat 9–Error tips: 请求无法映射到任何数据库。请确保请求 URL 正确, 并且已正确配置 URL 到数据库的映射

    一次意外关机引发的血案 1.重新开机打开 tomcat 9, 一切正常 2.打开 ords,异常报错: 404 Not Found 请求无法映射到任何数据库.请确保请求 URL 正确, 并且已正确配置 ...

  8. 微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription is canceled hint:解决办法【已解决】

    微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription ...

  9. 解决SQLite打开已有路径下的db问题

    最近遇到的需要加载已有路径下(sd card下)db的问题,找了一下资料,以下是解决的方法,仅供参考(转载自eoe): SQLiteOpenHelper 是Android框架为我们提供的一个非常好的数 ...

随机推荐

  1. 虚拟网卡 TUN/TAP 驱动程序设计原理

    简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在li ...

  2. 安装和使用PhantomJS

    一.安装PhantomJS(linux环境安装) 将PhantomJS下载在/usr/local/src/packet/目录下(这个看个人喜好) 操作系统:CentOS 7 64-bit 1.下载地址 ...

  3. (2.10)备份与还原--利用T-SQL进行备份还原

    常用: /************ 一.数据库备份 ************/ with init,format,stats=1init:覆盖format:格式化备份集stats=1:显示进度条 ST ...

  4. MySQL8.0新特性

    一.修改密码修改root密码之前要先flush privileges;ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'f ...

  5. 如何将apk安装在模拟器上面

    1.运行SDK Manager,选择模拟器,并运行模拟器 2.将需要安装的apk文件复制到platform-tools目录下(默认在:C:\Program Files\Android\android- ...

  6. JUnit之参数化测试、套件/成组测试的使用

    原文地址http://blog.csdn.net/yqj2065/article/details/39967065 参数化测试 正如数组替代int a0,a1,a2一样,测试加法时assertEqua ...

  7. testng生成报告 testng-xslt 美化测试报告

    testng生成报告 testng-xslt 美化测试报告 testng生成报告 testng-xslt 美化测试报告 用TestNG测试后,自动会生成html的测试报告.利用 testNG-xslt ...

  8. PL/SQL 表约束

    1. 表相关 a. 主键:constraint [主键的约束名] primary key b. 外键:constraint [外键约束名] foreign key( ) references []() ...

  9. kubernetes rabbitmq 集群安装配置

    生成secret来保存relang-cookie: secret.yml文件: apiVersion: v1kind: Secretmetadata: name: rabbit-cookietype: ...

  10. MyEclipse6.5注册

    貌似现在用MyEclipse6.5的人已经不多了,网上的大部分也都已过期,怀旧的人如果想快速得到一个MyElicpse6.5的注册码 Subscriber: dw008 Subscription Co ...