用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3079|回复: 11
收起左侧

[HELP] ==请教各位,xss_clean把提交内容的<script...转换得面目全非==

[复制链接]
发表于 2013-2-18 20:57:00 | 显示全部楼层 |阅读模式
xss_clean(或$this->input->post($var, TRUE))把提交内容的<script...转换得面目全非,比如,直接成了[removed]script....
实际还是需要正常显示这些字符的。

以往不用CI时,都是直接htmlspecialchars处理,现在用CI似乎反而麻烦了,不知各位都是怎么处理的?

发表于 2013-2-19 02:03:30 | 显示全部楼层
数据序列化后再提交,jquery中有相关的函数,可以直接用的,你是用的jquery吗?
 楼主| 发表于 2013-2-19 15:22:27 | 显示全部楼层
Altair 发表于 2013-2-19 02:03
数据序列化后再提交,jquery中有相关的函数,可以直接用的,你是用的jquery吗? ...

不是js提交数据,而是提交内容(贴子)里面,包含<script...一类的代码。

通常这类用户提交数据(post/get)我都处理一下再入库
发表于 2013-2-20 02:57:18 | 显示全部楼层
手册“表单验证”里面 提到一个过滤函数 prep_for_formprep_for_form,可以讲特殊字符转换成实体,可能对你有用吧?
 楼主| 发表于 2013-2-20 21:34:27 | 显示全部楼层
Altair 发表于 2013-2-20 02:57
手册“表单验证”里面 提到一个过滤函数 prep_for_formprep_for_form,可以讲特殊字符转换成实体,可能对你 ...

看了一下,实现的作用与htmlspecialchars基本一样,似乎比xss_clean更好些。

多谢:)
发表于 2013-2-20 21:37:17 | 显示全部楼层
发表于 2013-2-21 08:42:09 | 显示全部楼层
直接$this->input->post($var);
 楼主| 发表于 2013-2-21 18:22:58 | 显示全部楼层
longjianghu 发表于 2013-2-21 08:42
直接$this->input->post($var);

好像可以,多谢:)
发表于 2013-2-21 19:48:10 | 显示全部楼层
直接用$this->input->post() 其实就是去掉了跨站脚本过滤功能。
手册上有说明post的第二个参数。
第二个参数是可选的,如果想让取得的数据经过跨站脚本过滤(XSS Filtering),把第二个参数设为TRUE。
 楼主| 发表于 2013-2-21 20:05:44 | 显示全部楼层
kevin11 发表于 2013-2-21 19:48
直接用$this->input->post() 其实就是去掉了跨站脚本过滤功能。
手册上有说明post的第二个参数。
第二个 ...

默认是没有去掉跨站脚本的,刚刚测试过,后台可以直接insert db,存入的数据还是原样,比如<script ...
但是你前台显示的时候就有问题了。如果加上过滤功能TRUE,就是我原来说的转换成面目全非了。

原来我不用CI的时候,都是手工htmlspec,这样存到DB里的是&lt;script...,这样前台显示的时候也是OK的。

本版积分规则