5

是否有任何 HTTP 标头可以禁用特定页面的 Javascript?我的网站提供用户生成的 HTML 内容(这就是为什么我不能只使用htmlenitities)并且我想防止脚本(JavaScript 注入)。

我已经使用 HttpOnly-cookies 设置为仅在主域上进行身份验证,而用户内容仅显示在无法读取 cookie 的子域上。问题是仍然有太多的可能性来执行 JavaScript - 例如使用事件属性,例如onclick,Internet Explorer 在 CSS 中甚至有一个属性来允许 JavaScript 执行 ( expression),这是我以前从未听说过的。我读到的另一个有趣的想法是抛出异常以阻止后面的代码。另一个想法是定义一个包含所有允许的标签的列表以及一个包含每个允许的属性名称的数组,但这是一项非常艰巨的工作,我想这不会涵盖所有可能的注入。

我想我不是唯一一个遇到这个问题的人,所以有人知道覆盖所有可能有害代码的可能性 - 至少在现代浏览器中?

一个类似于 的简单虚构标题X-Scripting: disabled将使生活变得如此轻松!

4

1 回答 1

2

是的,有一个名为Content Security Policy的实验性 HTTP 标头允许您控制 JavaScript 的来源,这会使 XSS 成为不可能。但是,它目前仅受 Chrome 和 Firefox 支持。

启用 HttpOnly-cookies 是个好主意,但这将完全防止攻击。您仍然可以通过读取 CSRF 令牌并使用 XHR 执行请求来利用 XSS 。

获取 XSS 的方法有很多种,像ShieldSeal(下)这样的漏洞扫描器会(几乎)找到所有方法。Skipfish是一个非常原始的开源漏洞扫描程序,但它是免费的。这就是大多数 Web 应用程序处理广泛传播的漏洞的方式。(我在 ShieldSeal 工作,帮助构建他们的漏洞扫描器,我热爱我的工作。)

当发现问题时,您应该使用htmlspecialchars($var)htmlspecialchars($var, ENT_QUOTES)清理输入。ENT_QUOTES可以防止攻击者引入一个onclick或其他 JavaScript 事件。

于 2012-07-14T14:57:57.497 回答