是否有任何 HTTP header 可以为特定页面禁用 Javascript?
我的网站提供用户生成的 HTML 内容(这就是为什么我不能只使用 htmlenitities
)并且我想防止脚本(JavaScript 注入(inject))。
我已经使用 HttpOnly-cookies 设置为仅在主域上进行身份验证,而用户内容仅显示在无法读取 cookie 的子域上。
问题是执行 JavaScript 的可能性仍然太多——例如使用像 onclick
这样的事件属性,Internet Explorer 甚至在 CSS 中有一个属性允许 JavaScript 执行(expression
) 这是我以前从未听说过的。我读到的另一个有趣的想法是抛出异常以阻止后续代码。
另一个想法是定义一个列表,其中包含所有允许的标签,另外还有一个包含每个允许的属性名称的数组,但这是一项非常艰巨的工作,我想这不会涵盖所有可能的注入(inject)。
我想我不是唯一遇到这个问题的人,所以有没有人知道覆盖所有可能有害代码的可能性 - 至少在现代浏览器中?
类似于 X-Scripting: disabled
的简单假想 header 将使生活变得更加轻松!
最佳答案
是的,有一个名为 Content Security Policy 的实验性 HTTP header 这允许您控制 JavaScript 的来源,这可以使 XSS 成为不可能。但是目前只有 Chrome 和 Firefox 支持。
启用 HttpOnly-cookies 是个好主意,但这将完全防止零 攻击。你仍然可以通过 reading CSRF tokens, and carrying out requests with an XHR 利用 XSS .
获取XSS的方法有很多种,像ShieldSeal这样的漏洞扫描器(向下)将找到(几乎)所有这些。 Skipfish是一个非常原始但免费的开源漏洞扫描器。这就是大多数 Web 应用程序处理广泛传播的漏洞的方式。 (我在 ShieldSeal 工作,我帮助构建了他们的漏洞扫描器,我热爱我的工作。)
当发现问题时,您应该使用 htmlspecialchars($var)
或 htmlspecialchars($var, ENT_QUOTES)
来清理输入。 ENT_QUOTES
可以防止攻击者引入 onclick
或其他 JavaScript 事件。
关于php - 禁用特定页面上的 Javascript 执行 (HTML/PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483638/