[记录]CodeIgniter过滤请求参数的问题

完成了迁移xidige.com站点的工作,继续解决之前的问题:

CodeIgniter过滤请求参数的问题

在使用CI构建的网站上出现了个错误,这个错误出现得有点神乎,问题出现在传递参数上。大概可以理解是:从网页上传递了个参数,在后台获取到的参数与前台传递的不一致,但不是单纯地编码问题,参数被删掉了内容;

比如:像下面这样传递:xidige.com/?token=aHR0cDovL3YucHBzLnR2L3BsYXlfMzFONDdSLmh0bWw%3D

在后台获取token的值时,变成了:aHR cDovL3YucHBzLnR2L3BsYXlfMzF

很明显地,第四个字符和后面部分字符串都不见了,是怎么一回事呢?这里就要说说开源的好处了,可以直接看源码~

从input方法跟~~~跟~~一直到找到system/core/Security.php里的_remove_evil_attributes函数,其中进行了xss过滤;查看该函数,发现其在过滤javascript事件时使用了 on\w* 的正则表达式,这里就是把上面的参数最后部分替换掉的关键所在了。找到问题所在了,如何解决呢?

思前想后,采用了比较笨的办法:既然想过滤javascript事件名称,而其实这些事件也不是很多,那么就直接都写上算了,所以最后把on\w*替换成了所有的javascript事件名称了:

'onabort','onblur','onchange','onclick','ondblclick','onerror','onfocus','onkeydown','onkeypress','onkeyup','onload','onmousedown','onmousemove','onmouseout','onmouseover','onmouseup','onreset','onresize','onselect','onsubmit','onunload',

替换完,测试,问题解决。

PS:如果下次又出现传参问题,在无头绪时,可以直接从对XSS过滤、html转义等相关类或函数跟踪开始~

» 本文链接地址:https://www.xidige.com/492

打开支付宝扫一扫,即可进行扫码打赏哦

扫码支持
扫码打赏,你说多少就多少

标签:

分享到:

扫一扫 在手机阅读、分享本文

上一篇: 下一篇:
评论区0人评论156人参与

电子邮件地址不会被公开。 必填项已用*标注

*

loading

赞助商广告