3

我一直在更新会员页面系统,其中一项要求是允许在某些字段上使用粗体、下划线、斜体、字体颜色和链接,但不允许字体大小或样式 - 所有这些都使用 WYSIWYG 编辑器。这最初是使用 textarea 和一些最小的 HTML 过滤完成的,即<script>使用preg_replace(). 我知道这很疯狂而且绝对不安全。

我的第一个修改是使用 TinyMCE 并禁止在 TinyMCE 中使用某些标签,唯一的问题是显然我不能依赖 TinyMCE 作为任何类型的验证器,并且我发现保护 HTML 输入免受 XSS 是一个绝对雷区。我花了最后一个小时左右阅读某些实践,似乎几乎不可能允许某些 HTML 标记/属性而不会弄乱当前配置文件并进一步允许其他自定义,例如字体大小和内联样式的东西。例如,我需要允许带有 span 标签的字体颜色,但允许 style 属性也将允许任何 CSS 片段。

我现在已经想到了将 BBCode 与所见即所得编辑器一起使用的想法,因为这将使我们能够安全地应用于htmlspecialchars()输出,然后完全控制使用 BBCode 解析器为 [b]、[u] 生成的任何 HTML, [i] 和 [color] 带有nl2br()换行符的标签。

唯一的问题是我必须编写一些代码来将当前的 HTML 设置转换为 BBCode。

我的主要疑问是上述步骤与 BBCode 是否足以防止 XSS 攻击?或者我可以使用更优雅/更明显的 HTML 安全方法吗?

4

2 回答 2

4

您可以使用HTML Purifier库。它是重量级的,但允许诸如“仅允许样式标签中的颜色设置”之类的规则。它经过全面测试并积极开发。

于 2011-01-06T10:45:11.383 回答
1

保存为 html,并使用适当的 HTML 解析器(如DOMDocument)去除危险标签(如htmlspecialchars危险标签而不是盲目地应用于整个内容节点)

于 2011-01-06T10:18:36.677 回答