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



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

  • 配置中的"global_xss_filtering.php"。
  • 使用表单验证库时,单个字段的"xss_clean"规则。

如果使用此功能,是否避免了在输出字段时转义字段的需要?

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

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

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

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

如果您运行的是当前的 3.0-dev,那么form_prep()更具体地说明它转义了哪些字符。 无论哪种方式,它都应该避免 XSS;在某些情况下,它只是会产生意想不到的结果。 例如,如果您尝试在 3.0-dev 中输入文字"&amp;",然后表单验证失败,则字段值将更改为 &,而不会发出警告。 此更改是尝试解决双重转义问题(问题 1953)。

最新更新