CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患

发布时间:2024-04-02 点击:119
本文实例分析了ci(codeigniter)框架中url特殊字符处理与sql注入隐患。分享给大家供大家参考,具体如下:
php ci框架中url特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号’ 反斜杠\ 这种特殊字符又很容易给sql注入
在默认的config配置基础上加上:+=()特殊字符
#$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; $config['permitted_uri_chars'] ='a-z 0-9~%.:_\-\+=()'; 在ci框架中,尽量使用ar类进行数据库查询是比较靠谱的,因为在底层会帮助使用者进行一次有效的转义,但也仅仅是转义而已。
过滤的方法是escape_str() :
function escape_str($str, $like = false) { var_dump($str); echo \n ; if (is_array($str)) { foreach ($str as $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); } // escape like condition wildcards 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' and 1=2, hello'=>2); ); 输出结果:
array(
[name] => 2\’ and 1=2
[hello’ union select ] => 2
)
如果真实sql语句传入上面两个参数合并起来就可以查询出所有信息了,属于sql注入了


帮我删除下我要转入域名-域名及账户问题
云服务器怎么按小时计费
阿里云境外服务器购买
云主机和托管服务器哪个好
服务器 免备案
租用云测算服务器
腾讯云服务器怎么找到
云服务器如何挂在硬盘