使用CodeIgniter的XSS过滤是否避免在输出时需要转义?

时间:2012-12-16 15:45:30

标签: codeigniter xss

CodeIgniter为XSS过滤提供了几个方便的API。

  • config.php中的'global_xss_filtering'。
  • 'xss_clean'使用表单验证库时单个字段的规则。

如果您使用此功能,是否可以避免在输出字段时转义字段?

1 个答案:

答案 0 :(得分:3)

在某些情况下,xss_clean不会保护您。 Issue 470包括以下示例:

public function index()
{

    $name = $this->security->xss_clean('hover me" onmouseover=alert("XSS2") "'); 
    echo '</div>Name:<input value="'.$name.'">';
    echo '</body></html>';
}

开发人员的回应是,这是设计使然,并建议$name应该使用form_prep()进行转义。

如果您使用set_value('field-name', 'default')以便在表单验证失败时保留用户输入,那么...将尝试为您调用form_prep()。需要注意的是,如果您没有加载表单验证库,它将不会转义'default'参数。 (Issue 1781,已在3.0-dev中修复。

如果 运行当前的3.0-dev,那么form_prep()更具体地说明了它逃脱的字符。它应该避免使用XSS;它在某些情况下会产生意想不到的结果。例如。如果您尝试在3.0-dev中输入文字“&amp;”,然后表单未通过验证,则字段值将更改为&而不会发出警告。此更改试图解决双重转义问题(issue 1953)。