CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
本文实例分析了CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患。分享给大家供大家参考,具体如下:
phpCI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号'反斜杠\这种特殊字符又很容易给sql注入
在默认的config配置基础上加上:+=()特殊字符
#$config['permitted_uri_chars']='a-z0-9~%.:_\-'; $config['permitted_uri_chars']='a-z0-9~%.:_\-\+=()';
在CI框架中,尽量使用AR类进行数据库查询是比较靠谱的,因为在底层会帮助使用者进行一次有效的转义,但也仅仅是转义而已。
过滤的方法是escape_str():
functionescape_str($str,$like=FALSE) { var_dump($str); echo"\n"; if(is_array($str)) { foreach($stras$key=>$val) { $str[$key]=escape_str($val,$like); } return$str; } if(function_exists('mysql_real_escape_string')) { $str=addslashes($str); } elseif(function_exists('mysql_escape_string')) { $str=mysql_escape_string($str); } else { $str=addslashes($str); } //escapeLIKEconditionwildcards if($like===TRUE) { $str=str_replace(array('%','_'),array('\\%','\\_'),$str); } return$str; }
该方法仅仅是调用了一些转义函数,并对like参数进行过滤。
如果查询的变量没有被单引号包裹,那么就无法进行保护
ci框架默认的过滤函数是escape:
xx".$this->db->escape($xxx)."xx
由于数组的$key过滤不严直接带入SQL查询的漏洞屡见不鲜:
$arr=array( 'name'=>"2'and1=2", "hello'"=>"2"); );
输出结果:
Array(
[name]=>2\'and1=2
[hello'unionselect]=>2
)
如果真实sql语句传入上面两个参数合并起来就可以查询出所有信息了,属于sql注入了
更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《ZendFrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。