4

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

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

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

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

4

3 回答 3

3

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

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


在这种情况下,我看不出设置 CSP 标头有什么帮助,因为它应该保护您的应用程序/网站免于访问恶意内容,而不是保护您的应用程序/网站免于被访问。

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

来源:内容安全政策 1.1


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

实际用例是什么?

于 2013-08-08T10:58:06.000 回答
1

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

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

试图阻止 XMLHttpRequest、框架和 cookie 读取(httponly)可以使攻击者的生活稍微烦人,但它们不能有效地阻止访问。

同源策略是您必须依赖的一切,因此您应该努力避免成功的 XSS 攻击。

于 2013-08-08T21:36:38.183 回答
0

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

于 2013-08-08T18:57:01.380 回答