是否有任何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事件。