【发布时间】:2011-06-04 13:32:09
【问题描述】:
我一直在更新会员页面系统,其中一项要求是允许某些字段上的粗体、下划线、斜体、字体颜色和链接但不允许字体大小或样式 - 所有这些所见即所得的编辑器。这最初是通过一个文本区域和一些最小的 HTML 过滤完成的,即使用 preg_replace() 删除 <script>。我知道这很疯狂,而且绝对不安全。
我的第一个版本是使用 TinyMCE 并禁止在 TinyMCE 中使用某些标签,唯一的问题是显然我不能依赖 TinyMCE 作为任何类型的验证器,并且我发现保护 HTML 输入免受 XSS 是绝对雷区。 我花了大约最后一个小时阅读某些实践,似乎几乎不可能允许某些 HTML 标记/属性而不会弄乱当前的配置文件并进一步允许其他自定义,例如字体大小和内联样式的东西。例如,我需要允许带有 span 标签的字体颜色,但允许 style 属性也将允许任何 CSS 片段。
我现在已经有了将 BBCode 与 WYSIWYG 编辑器一起使用的想法,因为这将允许我们在输出上安全地应用 htmlspecialchars(),然后完全控制使用 BBCode 解析器生成的任何 HTML [b ]、[u]、[i] 和 [color] 标记,带有 nl2br() 用于换行。
唯一的问题是我必须编写一些代码来将当前的 HTML 设置转换为 BBCode。
我的主要疑问是上述步骤是否足以防止 XSS 攻击?或者我可以使用更优雅/更明显的 HTML 安全方法吗?
【问题讨论】:
标签: php security xss wysiwyg bbcode