禁用特定页面上的Javascript执行(HTML / PHP)

时间:2012-07-14 12:14:30

标签: php javascript security header

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

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

我想我不是唯一有这个问题的人,所以有人知道可能包含所有可能有害的代码 - 至少在现代浏览器中是这样吗?

类似于X-Scripting: disabled的简单虚构标题会让生活变得如此简单!

1 个答案:

答案 0 :(得分:2)

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

启用HttpOnly-cookies是个好主意,但这样可以防止 ZERO 攻击。您仍然可以通过reading CSRF tokens, and carrying out requests with an XHR来利用XSS。

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

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