CodeIgniter为XSS过滤提供了几个方便的API。
如果您使用此功能,是否可以避免在输出字段时转义字段?
答案 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中输入文字“&
”,然后表单未通过验证,则字段值将更改为&
而不会发出警告。此更改试图解决双重转义问题(issue 1953)。