我一直在更新会员页面系统,其中一个要求是允许在某些字段但不是字体大小或样式上使用粗体,下划线,斜体,字体颜色和链接 - 所有这些都是一个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安全方法吗?
答案 0 :(得分:4)
您可以使用HTML Purifier库。它是重量级的,但允许“仅允许样式标签中的颜色设置”之类的规则。经过全面测试和积极开发。
答案 1 :(得分:1)
保存到html中,并使用正确的HTML解析器(如DOMDocument)来清除危险标记(例如htmlspecialchars
危险标记,而不是盲目地应用于整个内容节点)