【问题标题】:Protect WYSIWYG input from XSS attacks in PHP?保护所见即所得输入免受 PHP 中的 XSS 攻击?
【发布时间】:2023-03-18 23:15:01
【问题描述】:

我在我的地方读到,为了防止 XSS 攻击,最佳做法是先在用户输入上执行 stripslashes,然后再执行 htmlspecialchars。但是,在某些情况下这是不可能的,例如当允许用户使用所见即所得编辑器进行一些基本标记时。

PHP 是否为此提供任何方法,允许某些基本标签(b、i、u、a、img、...)的白名单,但会去除它们所有潜在的危险参数,以及转义所有 html除了属于白名单标签和标签参数集的<>" 之外的特殊字符?

或者我应该忘记这样做并切换到不同的方法,例如使用 BBcode 进行带有标记的用户输入?

【问题讨论】:

  • 等等,TinyMCE 会自动防御 XSS
  • @bad_boy 编辑器本身是客户端,因此永远无法提供任何合理的保护。
  • 选择是按照建议使用 HTMLPurifier 之类的库,或者切换到 markdown 格式,或者自己滚动。
  • 我来这里是为了了解如何保护 TinyMCE 免受 XSS 攻击,所以人们告诉 OP TinyMCE 可以防止 XSS 我可以确认被错误告知,因为它没有,至少不是我的版本正在使用。如果 TinyMCE 对此进行保护,A) 并非总是如此,B) 我不想相信用户不会伪造 POST 请求。

标签: php xss wysiwyg


【解决方案1】:

您应该在输出富文本的任何页面上实现Content Security Policy除了使用诸如HTML Purifier 之类的清理程序使文本对HTML 输出安全。这应该可以有效防止注入的脚本命令运行。

CSP 允许您有效地阻止浏览器执行内联脚本。目前是supported by Chrome 和 Firefox 等现代浏览器(虽然 IE 目前只有部分支持)。

这是通过您页面的 HTTP 响应标头完成的。

例如

Content-Security-Policy: script-src 'self' https://apis.google.com

如果用户设法将内联 JavaScript 注入到您的页面中,将停止执行它(它将被忽略并发出警告),但将允许脚本标记引用您自己的服务器或 https://apis.google.com。这可以根据您的需要进行定制。不支持 CSP 的浏览器仍需要 HTML sanitizer,因此您仍应首先运行所有用户提供的输入。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2017-04-07
    • 2015-12-08
    相关资源
    最近更新 更多