5

昨天,我阅读了一些关于如何使用 Asp.Net MVC 防止 Json 劫持的好文章。规则是:永远不要通过 get 请求以 json 格式发送敏感数据。通过在 google 上进行简单的搜索,您可以轻松地了解如何定义一个脚本,该脚本将用于在他的 auth cookie 的帮助下从另一个用途中提取数据。

但是在阅读了所有这些文章之后,我不知道为什么无法使用 Ajax Jquery post request 进行 Json Hijacking。我读到 Ajax 请求受制于相同的源策略,但 JQuery 具有能够执行跨域请求的属性。

在这种情况下,是否可以在文档就绪事件上使用 $.postJSON 的脚本进行 Json 劫持?如果是或否,你能解释一下我的确切原因吗?

这是一组简单的代码来做我在想的事情:

$.postJSON = function (url, data, callback) {
   $.post(url, data, callback, "json");
};

<script>
    $(function(){
       $.postJSON("/VulnerableSite/ControllerName/ActionName", 
         { some data parameters }, function() {
         // Code here to send to the bad guy the data of the hacked user. 
         }
    });
</script>

非常感谢你。

4

1 回答 1

8

但是 JQuery 有一个属性可以进行跨域请求。

是的,但它只适用于 GET 请求。您不能使用 POST 请求进行跨域 AJAX 调用。大多数现代浏览器也已经修复了覆盖该__defineSetter__方法的可能性。这种攻击的想法依赖于包含一个<script>从恶意站点指向您的网站的标签。但是浏览器发送一个 GET 请求是为了检索这个脚本而不是 POST。这就是为什么使用 POST 通过 JSON 传输敏感信息更安全的原因。

于 2013-03-02T13:25:07.580 回答