ci3的项目,如表单填写了<script>alert(123);</script>,然后提交,就会把这段代码存储到mysql数据库。需要用htmlspecialchars进行转义,如双引号(")、尖括号(<、>),或进行实体转换,如将"<"转换为"<",">"转换为">“存储。
两个步骤解决:
1、定义hooks(钩子)事件,application/config/hooks.php添加下面代码:
$hook['pre_controller'] = function() {
// 获取所有 GET 和 POST 参数
$params = array_merge($_GET, $_POST);
// 对所有参数进行 HTML 转义
foreach ($params as $key => $value) {
if (is_array($value)) {
$_GET[$key] = array_map('htmlspecialchars', $value);
$_POST[$key] = array_map('htmlspecialchars', $value);
} else {
$_GET[$key] = htmlentities($value);
$_POST[$key] = htmlentities($value);
}
}
};
2、启用钩子,application/config/config.php修改
$config['enable_hooks'] = TRUE;
就可以了,另外其它常用的钩子事件如下,可以根据需要使用:
Codelgniter 提供了多个预定义的执行点(即钩子事件),你可以在这些时机运行自定义逻辑。常用钩子事件包括
pre_system:系统完全启动之前执行,此时控制器还未加载
post system:请求结束后执行,页面输出完成后触发
pre controller:控制器加载之前执行
post_controller:控制器方法执行后、输出发送前触发
post controller constructor:控制器构造函数执行之后运行
最后注意,如果页面需要用ueditor等富文本展示已转义的内容,必须使用htmlspecialchars_decode解析转义。如:
<!-- 加载编辑器的容器 -->
<script id="ueditor" name="content" type="text/plain"><?php echo htmlspecialchars_decode($article['content']); ?></script>
162

被折叠的 条评论
为什么被折叠?



