【问题标题】:Allow users to post BBCode or HTML with WYSIWYG?允许用户使用 WYSIWYG 发布 BBCode 或 HTML?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 这与我的兴趣相关,是否有示例说明如何执行此操作?
    【解决方案2】:

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

    【讨论】:

    • 这是我一开始所做的,但有一个要求是用户可以更改字体颜色,但不能在样式属性中添加任何内容。我刚刚在问题中更清楚地说明了这一点:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2017-06-03
    相关资源
    最近更新 更多