为什么决定使用XMLHTTPRequest进行XML调用不应该跨域边界调用?您可以检索JavaScript,图片,CSS,iframe以及我能从其他域中想到的任何其他内容.为什么不允许Ajax HTTP请求跨越域边界?考虑到我可以看到它被滥用的唯一方式,这似乎是一个奇怪的限制,如果有人将Javascript注入页面.但是,在这种情况下,您只需向文档中添加img,script或iframe元素,即可让它请求第三方URL并将其发送到服务器.
[编辑]
一些答案指出了以下原因,让我们指出他们没有创造禁止这一点的主要原因的原因.
你可以在不使用它的情况下进行XSRF攻击.作为一般规则,XMLHTTPRequest根本不被使用,仅仅是因为以与所有主流浏览器兼容的方式制作XMLHTTPRequest非常困难.如果您希望它们加载您的URL,则可以更轻松地向网址添加img标记.
<script type="text/javascript">
$.post("http://some-bank.com/transfer-money.php",
{ amount: "10000", to_account: "xxxx" })
</script>
Run Code Online (Sandbox Code Playgroud)
可以完成
<body onload="document.getElementById('InvisbleForm').submit()"
<div style="display:none">
<form id="InvisbleForm" action="http://some-bank.com/transfer-money.php" method="POST">
<input type="hidden" name="amount" value="10000">
<input type="hidden" name="to_account" value="xxxxx">
</form>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
你不会再造成任何不安全感.您只是想要以良好的方式使用它的开发人员感到不安.任何想要将此功能用于邪恶(也称为真棒)的人都可以使用其他方法来实现它.
我将bobince的答案标记为正确,因为他指出了关键问题.因为XMLHTTPRequest允许您使用凭据(cookie)发布到目标站点,并读取从站点发回的数据,以及发送人员凭据,您可以编排一些提交一系列表单的JavaScript,包括确认表单,完成生成的任何随机密钥,以防止XSRF.通过这种方式,您可以浏览目标网站,如银行,银行的网络服务器将无法确定是否只是提交所有这些表单的普通用户.
我需要从在Firefox中运行的脚本发出跨域请求(它仅用于开发目的).
这可以实现吗?也许修改about:config键?
谢谢!