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


Disable Javascript execution on specific pages (HTML/PHP)

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

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

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

一个类似于X-Scripting: disabled的简单的想象标题会让生活变得更轻松!

是的,有一个实验性的HTTP头称为内容安全策略,它允许您控制JavaScript的来源,这可能会使XSS变得不可能。然而,目前只有Chrome和Firefox支持它。

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

有很多方法可以获得XSS,像ShieldSeal(向下)这样的漏洞扫描程序可以找到(几乎)所有这些方法。Skippish是一个开源漏洞扫描程序,非常原始,但它是免费的。这就是大多数web应用程序处理广泛漏洞的方式。(我为ShieldSeal工作,我帮助构建他们的漏洞扫描仪,我热爱我的工作。)

当发现问题时,应使用htmlspecialchars($var)htmlspecialchars($var, ENT_QUOTES)对输入进行消毒。ENT_QUOTES可以防止攻击者引入onclick或其他JavaScript事件。