gpt4 book ai didi

ajax - 为什么跨域Ajax是一个安全问题?

转载 作者:行者123 更新时间:2023-12-03 07:05:02 25 4
gpt4 key购买 nike

为什么决定使用 XMLHTTPRequest 进行 XML 调用不应该跨域边界进行调用?您可以从其他域检索 JavaScript、图像、CSS、iframe 以及我能想到的任何其他内容。为什么 Ajax HTTP 请求不允许跨域边界?考虑到我能看到它被滥用的唯一方式就是有人将 JavaScript 注入(inject)到页面中,这似乎是一个奇怪的限制。但是,在这种情况下,您可以简单地将 img、script 或 iframe 元素添加到文档中,以使其请求第三方 URL 并将其发送到服务器。

[编辑]

一些答案​​指出了以下原因,让我们指出他们没有构成禁止这样做的主要原因的原因。

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 来提交一系列表单,包括确认表单,包含生成的任何随 secret 钥,这些随 secret 钥是为了防止 XSRF 而放置的。通过这种方式,您可以浏览目标网站,例如银行,而银行的网络服务器将无法判断这不仅仅是提交所有这些表单的普通用户。

最佳答案

Why are Ajax HTTP Requests not allowed to cross domain boundaries.

因为 AJAX 请求 (a) 使用用户凭据提交,并且 (b) 允许调用者读取返回的数据。

这些因素的结合可能会导致漏洞。有人建议添加一种省略用户凭据的跨域 AJAX 形式。

you could simply add an img, script, or iframe element to the document

这些方法都不允许调用者读取返回的数据。

(除非是故意设置为允许这样做的脚本,以允许跨域脚本编写 - 或者有人犯了一个可怕的错误。)

Your can do XSS attacks without using this at all. Posting to third party site

这不是 XSS 攻击。这是跨站点请求伪造攻击 (XSRF)。有一些已知的方法可以解决 XSRF 攻击,例如包含一次性或加密 token 来验证提交是否是故意来自用户而不是从攻击者代码启动。

如果您允许跨域 AJAX,您将失去这种保护措施。攻击代码可以从银行站点请求页面,读取该页面上的任何授权 token ,然后在第二个 AJAX 请求中提交它们以执行转账。这将是跨站点脚本攻击。

关于ajax - 为什么跨域Ajax是一个安全问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/466737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com