[编辑]
一些答案指出了以下原因,让我们指出它们不会成为禁止此操作的重大原因。
XSRF(跨站点请求伪造,也称为CSRF、XSRF)
您可以完全不使用此操作执行XSRF攻击。一般来说,根本不使用XMLHTTPRequest,因为很难以一种与所有主要浏览器兼容的方式进行XMLHTTPRequest。如果您希望它们加载您的URL,则更容易只需向URL添加一个img标记。
发布到第三方站点
<script type="text/javascript">
$.post("http://some-bank.com/transfer-money.php",
{ amount: "10000", to_account: "xxxx" })
</script>
可以通过以下方式实现
<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>
JPunyon:为什么你要在一个新功能中留下漏洞
你并没有创造更多的不安全因素。你只是让那些想要以正确方式使用它的开发者感到不便。任何想要用这个功能来干坏事(也就是很棒的事情)的人都可以使用其他方法。
结论
我将从bobince的答案标记为正确,因为他指出了关键问题。由于XMLHTTPRequest允许您以凭据(cookie)向目标站点发送数据,并读取从站点发送回的数据,同时发送用户的凭据,您可以编写一些JavaScript来提交一系列表单,包括确认表单和任何随机生成的密钥,以尝试防止XSRF攻击。通过这种方式,您可以浏览目标网站(如银行),而银行的Web服务器无法区分是否仅有普通用户提交了所有这些表单。