允许用户使用WYSIWYG发布BBCode或HTML?

时间:2011-01-06 10:01:01

标签: php security xss wysiwyg bbcode

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

保存到html中,并使用正确的HTML解析器(如DOMDocument)来清除危险标记(例如htmlspecialchars危险标记,而不是盲目地应用于整个内容节点)