我知道有一个 Cross site forgery attack可以通过重载 Array 构造函数对返回数组的请求执行。例如,假设我有一个带有 URL 的网站:
foo.com/getJson
返回:
['Puff the Dragon', 'Credit Card #']
这通常是由我自己的网站在 XHR 请求后进行 Javascript eval
处理,但另一个网站可以通过包含以下内容来嗅探此数据:
<script>
function Array() {
var arr = this;
var i = 0;
var next = function(val) {
arr[i++] setter = next;
document.write(val);
};
this[i++] setter = next;
}
</script>
<script src="http://foo.com/getJson"></script>
我的问题是,当请求返回 Javascript 对象时可以做同样的事情吗?即
{ name: 'Puff the Dragon', cc: 'Credit Card #' }
我想不出办法来做到这一点,但也许我错过了一些东西。我知道有更好的解决方案来保护我的网站,例如使用 while(1) hack或者要求 URL 中包含身份验证 token ,但我正在尝试找出是否存在此类安全漏洞。
最佳答案
我见过的来源,比如Haacked和 Hackademix ,特别表明根对象是安全的(大概在所有主要浏览器中)。这是因为脚本不能以对象文字开头。默认情况下,ASP.NET 使用 d prefix 包装对象和数组。 ,但我认为这只是为了简化客户端库。
关于javascript - 是否可以对返回 JSON 对象的 URL 执行跨站点请求伪造攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170196/