【问题标题】:xss_clean removes formatting of tinymcexss_clean 删除 tinymce 的格式
【发布时间】:2020-09-24 18:22:19
【问题描述】:

在 Codeigniter 3.x 中,如果我在将 $data 保存到数据库之前使用 $data = $this->security->xss_clean($data);,它会删除 TINYMCE 编辑器 的所有格式并将 xss=removed 放置如下:

<span xss=removed><strong>1. Joint pain </strong></span>

因此,我在输出中看不到字体颜色、背景颜色、字体大小的变化。

如果我在将 $data 保存到数据库之前删除 $data = $this->security->xss_clean($data); 并仅实施以下安全措施,则格式化工作正常:

$data = trim($data);
//$data = $this->security->xss_clean($data);
$data = html_escape($data);
$data = strip_tags($data);

现在它在数据库中存储以下内容:

<span style="font-size: 14pt;"><strong>1. Joint pain </strong></span>

我有两个问题:

  1. 上述代码是否足以确保发送到数据库的数据被完全清理并且不会允许任何攻击。我正在使用 Codeigniter 的 Active Records 来执行 SQL。

  2. 我应该在屏幕上显示输出时使用 xss_clean,如下所示:echo $this->security->xss_clean(htmlspecialchars_decode($data))

请帮忙。

【问题讨论】:

    标签: php codeigniter security codeigniter-3 xss


    【解决方案1】:

    Codeigniter 中的 xss_clean 函数已在较新版本中被删除,因为它不是正确的方法。它试图做太多,但不是以一种可靠的方式。它可以替换为转义或过滤输入。这可以通过 HTML 转义函数或 HTMLPurifier 之类的库来完成。

    HTML 转义适用于输入是纯文本并且您希望将其插入 HTML 文档的情况。在这种情况下,您可以在将数据输出到页面时对其进行转义。这可能取决于插入位置的上下文(请参阅OWASP XSS Prevention Cheat Sheet)。

    如果您的输入是 HTML,正如您从某些编辑器那里获得的,那么您需要类似 HTMLPurifier 的内容。这既可以在将数据保存到数据库之前应用,也可以在显示数据时应用。这会根据允许元素的白名单过滤 HTML,因此可以在阻止脚本的同时允许某些格式。

    【讨论】:

    • 感谢您的回复,但是在CI官方论坛上,他们说我们应该只在输出内容时进行xss清理,我们不应该在将内容保存到数据库时这样做。请查看此链接:forum.codeigniter.com/thread-61933.html
    • @ITSagar 这取决于你在做什么清洁。多次执行html_escape 将导致双重编码,因此应在输出时执行一次。多次应用净化器会产生与应用一次相同的输出,因此使用它过滤数据库值是安全的。如果您只想运行一次,我会在输出时执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多