繁体   English   中英

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

[英]Is it possible to prevent a page being loaded using XHR?

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

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

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

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

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

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


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

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

资料来源: 内容安全政策1.1


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

什么是实际用例?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM