是否可以阻止使用XHR加载页面?

时间:2013-08-08 10:27:54

标签: javascript security browser web

我想传输敏感信息,例如index.html,只能在页面加载期间从JavaScript访问。之后,页面上的JavaScript应该无法访问该数据。

我可以在加载时轻松地从DOM中删除敏感数据,但我还需要阻止使用XMLHTTPRequest加载页面或从IFrame中抓取页面。

我可以使用X-Frame-Options标头和其他框架破坏技巧来阻止IFrame但是如何阻止使用XHR加载页面?

我提出的最佳解决方案是使用index.html指令中不包含self的CSP标头为connect-src提供服务但是我不能将XHR提供给任何人我的服务器上的URL,我需要列出所有其他可能的连接目标。必须有更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:3)

我认为您最好的选择是检查X-Requested-With标头的值XMLHttpRequest,因为大多数客户端框架/库在使用XHR访问您的网站时都会发送该标头。

但是,这样做不会阻止每次尝试使用XHR加载页面,因为它不是强制性的XHR标头,可能会被欺骗。


我不知道在这种情况下如何设置CSP标头会有所帮助,因为它应该保护您的应用/网站不会访问恶意内容,而不是保护您的应用/网站不被访问。

  

“内容安全策略是一种声明性策略,允许Web应用程序的作者(或服务器管理员)通知客户端应用程序期望加载资源的来源”

来源:Content Security Policy 1.1


旁注:如果您的JavaScript从DOM中删除了敏感信息,用户仍然可以通过控制台或检查页面源来访问它。

实际用例是什么?

答案 1 :(得分:1)

  

假设我想保护CSRF令牌不被XSS攻击“窃取”。

如果您有XSS漏洞,则完全丢失。此时,攻击者基本上可以读取和控制用户可以在该源(通常是在该主机名下托管的所有内容:端口组合)中的所有相同信息。攻击者此时通过瞄准CSRF令牌几乎没有收获,他们已经有了更深层次的妥协。

尝试阻止XMLHttpRequest,框架和cookie读取(httponly)可能会使攻击者的生活稍微烦恼但却无法有效阻止访问。

同源策略是您必须依赖的所有内容,因此您应该将您的努力用于避免成功的XSS攻击。

答案 2 :(得分:0)

在页面加载后通过Ajax / POST加载敏感数据可能是一个更好的主意,并通过会话cookie或用户名/密码保护来处理安全性。