codeigniter 的 xss 防护需分版本处理:ci3 支持但已废弃输入过滤,ci4 彻底移除并强制输出转义;应结合输入验证、上下文敏感输出编码与csp等纵深防御。

CodeIgniter 的 XSS 过滤配置需分版本看待:CI3 支持输入时过滤(但已不推荐),CI4 则彻底移除该机制,转向更安全的输出转义策略。关键不是“怎么开开关”,而是“在哪、用什么方式防才真正有效”。
CI3 中的 XSS 过滤配置方式
CI3 提供三种启用途径,但都仅作基础防护,不能替代输出编码:
-
全局开启:在
application/config/config.php中设$config['global_xss_filtering'] = TRUE;。此设置会让所有$this->input->post()、$this->input->cookie()等自动调用xss_clean()。注意:该参数已被标记为废弃,仅保留向前兼容。 -
按需启用单字段:调用输入方法时传入
TRUE作为第二个参数,例如:$this->input->post('content', TRUE)或$this->security->xss_clean($data)。 -
图片上传检测:对文件内容做 XSS 检查时,使用
$this->security->xss_clean($file, TRUE),返回布尔值判断是否安全。
CI4 中不再有 XSS 过滤配置
CI4 已完全移除 xss_clean() 及相关配置项。官方明确要求改用上下文感知的输出转义:
- 视图中统一使用
esc($data, 'html')、esc($data, 'js')、esc($data, 'url')等,根据输出位置选择对应类型。 - 富文本场景必须配合白名单过滤器(如 HTMLPurifier),不能依赖简单清洗。
- 配合 CSP(内容安全策略)头进一步限制脚本执行环境。
为什么输入时过滤不可靠
XSS 是输出型漏洞,风险发生在数据被渲染进 HTML/JS/CSS 时,而非提交瞬间。xss_clean 的问题包括:
- 仅靠正则匹配,易被大小写混淆(
OnErRoR)、空格分隔(on error=)、注释干扰(on











