2013-03-02 146 views
6

昨天,我读了一些关于如何防止Json Hijacking with Asp.Net MVC的好文章。规则是:绝不会以get请求的形式发送json格式的合理数据。通过在谷歌上进行简单搜索,您可以轻松地学习如何定义一个脚本,该脚本将用于通过其auth cookie的帮助从另一个用途提取数据。Json使用Ajax劫持Jquery post请求

但是在阅读了所有这些文章之后,我不知道为什么使用Ajax Jquery post请求不能执行Json劫持。我读过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> 

非常感谢你。

回答

8

但JQuery有一个属性能够做跨域请求。

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

+0

我看了这篇文章(http://stackoverflow.com/questions/3877309/submit-cross-domain-ajax-post-request),他说我可以跨域AJAX调用与POST请求,但我赢了没有得到回应。在任何情况下,如果我总是使用POST请求,那么回答我就没有可能与JSON相关的漏洞。 – Samuel 2013-03-02 13:43:35

+0

是否有可能通过调用$ .get而不是尝试重新定义数组来实现json劫持?我在网上阅读的所有文章都没有提到使用jQuery来做Ajax查询。 – Samuel 2013-03-22 12:26:25

+0

@Samuel:不,jQuery AJAX请求受[同源策略](http://en.wikipedia.org/wiki/Same-origin_policy)保护。包含'