当前位置: 首页 > 面试题库 >

为什么跨域Ajax是安全问题?

慕高阳
2023-03-14
问题内容

为什么决定使用 XMLHTTPRequest
进行XML调用不应该跨域边界进行调用?您可以检索JavaScript,图像,CSS,iframe以及我可以想到的来自其他域的几乎所有其他内容。为什么不允许Ajax
HTTP请求跨越域边界?考虑到我可以看到它被滥用的唯一方法,这似乎是一个奇怪的限制,那就是如果有人要向页面中注入Javascript。但是,在这种情况下,您只需在文档中添加一个img,脚本或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允许您使用凭据(cookies)发布到目标站点,并读取从站点发送回的数据以及发送人员凭据,所以您可以编排一些javascript,这些javascript可以提交一系列表单,包括确认表单,并附有为防止XSRF而生成的随机密钥。这样,您就可以像银行一样浏览目标站点,而银行的网络服务器将无法断定,不仅仅是提交所有这些表格的普通用户。


问题答案:

为什么不允许Ajax HTTP请求跨越域边界。

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

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

您只需将img,脚本或iframe元素添加到文档中

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

(除非脚本经过故意设置以允许这种情况,允许的跨域脚本编写,或者有人进行了可怕的模仿)。

您可以完全不使用XSS进行攻击。发布到第三方网站

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

如果您允许跨域AJAX,则将失去此保护措施。攻击代码可能从银行网站请求一个页面,读取该页面上的所有授权令牌,然后在第二个AJAX请求中提交它们以执行转移。那
是跨站点脚本攻击。



 类似资料:
  • 问题内容: 默认情况下,浏览器不允许跨站点AJAX请求。 我了解,设想不正确的跨域请求 可能 会带来安全风险。如果我使用外部站点的html或javascript,然后将其“呈现”到我的网站中,那就是一个问题。该外部代码可用于处理许多不良情况,例如访问当前用户的会话数据。 但是,如果我仅请求JSON或XML数据,并且使用适当的库来解析JSON(而不仅仅是使用eval),我将无法想象这会带来安全风险。

  • 本文向大家介绍为什么会有跨域问题?怎么解决跨域?相关面试题,主要包含被问及为什么会有跨域问题?怎么解决跨域?时的应答技巧和注意事项,需要的朋友参考一下 为啥会有跨域问题 怎么解决跨域呢? 方案一 JSONP:通过script可以跨域的原理,执行服务端的回调函数 方案二 代理:nigix 或者webpack 代理 配置 方案三 CORS :"跨域资源共享",设置'Access-Control-All

  • 问题内容: 除了JSONP,为什么要遵循相同的域策略? 问题答案: 出于安全原因,已实施“同源起源策略”;引用维基百科的相关句子: 这种机制对现代Web应用程序具有特殊的意义,因为Web服务器广泛依赖于HTTP cookie来维护经过身份验证的用户会话,因为服务器基于HTTP cookie信息进行操作以揭示敏感信息或执行状态更改操作。 必须在客户端维护不相关站点提供的内容之间的严格分隔,以防止丢失

  • 问题内容: 阅读有关CORS(跨源资源共享)的信息后,我不了解它如何提高安全性。如果发送了正确的ORIGIN标头,则允许跨域AJAX通信。例如,如果我发送 来源:http://example.com 服务器检查此域是否在白名单中,以及是否在标头中: 访问控制允许来源:[此处接收的网址] 与响应一起发送回去(这是简单的情况,也有预先要求的请求,但问题是相同的)。 这真的安全吗?如果有人想接收该信息,

  • 我们先从这么一个问题来引入我们本章节的学习 —— 什么是跨域请求? 1.跨域请求 简单来说,跨域请求就是一个域下的资源请求另外一个域下的资源。 同一个域,指的是,协议名、域名、端口号都一致。 举个例子来说,假如 “http://www.a.com” 下的 JavaScript 脚本发起 Ajax 请求 “http://www.a.com/ajax” ,由于 协议名 http 、域名 www.a.c

  • 异步Javascript和XML(AJAX)是用于开发Web应用程序以提供丰富用户体验的最新技术之一。由于它是一项新技术,因此尚未完成许多安全问题,以下是AJAX中的少数安全问题。 攻击面更多,因为需要保护更多输入。 它还公开了应用程序的内部功能。 无法保护身份验证信息和会话。 客户端和服务器端之间存在非常狭窄的界限,因此存在安全性错误的可能性。  示例 以下是AJAX安全性的示例 - 2006年