在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>
我有两个问题:
以上代码是否足以确保发送到数据库的数据经过充分清理,不会允许任何攻击。我正在使用Codeigniter的活动记录来执行SQL。
在屏幕上显示输出时,我应该使用xss_clean吗:
echo $this->security->xss_clean(htmlspecialchars_decode($data))
请帮忙。
Codeigniter中的xss_clean
函数在较新版本中已被删除,因为它不是正确的方法。它试图做得太多,但不是以可靠的方式。它可以替换为转义或过滤输入。这可以通过HTML转义函数或类似HTMLPurifier的库来完成。
HTML转义适用于输入为纯文本,并且您希望将其插入HTML文档中的情况。在这种情况下,您可以在页面上输出数据时对其进行转义。这可能取决于插入位置的上下文(请参阅OWASP XSS预防作弊表(。
如果你的输入是HTML,就像你从一些编辑器那里得到的那样,那么你想要像HTMLPurifier这样的东西。这既可以在将数据保存到数据库之前应用,也可以在显示数据时应用。这将根据允许元素的白名单过滤HTML,因此可以在阻止脚本的同时允许一些格式设置。