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

标签 php javascript security header

是否有任何 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/

相关文章:

php - 保留数据库标志 1 直到项目到期日期介于 CURDATE() + INTERVAL 7 DAY 和 CURDATE() + INTERVAL 30 DAY 之间

javascript - Aurelia - 引用错误 : SelectValueObserver is not defined

javascript - 检查当前日期是否不小于 dd/MM/yyyy 格式的当前日期

javascript - 如何通过Javascript Post函数保护通过PHP运行的SQL

c# - Azure 存储,使用 BlobRequestOptions 而不使用 CloudBlobClient

PHP:试图让 fgets() 在 CRLF、CR 和 LF 上触发

php - php 正则表达式中具有相同名称的两个组

php - PHP 的 SendGrid 很慢。非阻塞请求是否可能?

javascript - 什么是传递类型、通过一些条件并返回对象的良好设计模式

java - 为什么可以在不提供密码的情况下指向使用自定义密码的信任库?