当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-11 11:22:50 浏览: 评论:0 

本文实例分析了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() :

  1. function escape_str($str$like = FALSE) 
  2.   var_dump($str); 
  3.   echo "\n" ; 
  4.   if (is_array($str)) 
  5.   { 
  6.     foreach ($str as $key => $val
  7.     { 
  8.       $str[$key] = escape_str($val$like); 
  9.     } 
  10.     return $str
  11.   } 
  12.   if (function_exists('mysql_real_escape_string')) 
  13.   { 
  14.     $str = addslashes($str); 
  15.   } 
  16.   elseif (function_exists('mysql_escape_string')) 
  17.   { 
  18.     $str = mysql_escape_string($str); 
  19.   } 
  20.   else 
  21.   { 
  22.     $str = addslashes($str); 
  23.   } 
  24.   // escape LIKE condition wildcards 
  25.   if ($like === TRUE) 
  26.   { 
  27.     $str = str_replace(array('%''_'), array('\\%''\\_'), $str); 
  28.   } 
  29.   return $str

该方法仅仅是调用了一些转义函数,并对like参数进行过滤。

如果查询的变量没有被单引号包裹,那么就无法进行保护

ci 框架默认的过滤函数是escape :

xx". $this->db->escape ( $xxx )."xx

由于数组的$key过滤不严直接带入SQL查询的漏洞屡见不鲜:

  1. $arr = array
  2.   'name'=>"2' and 1=2"
  3.   "hello'"=>"2"); 
  4. ); 

输出结果:

  1. Array( 
  2.     [name] => 2\' and 1=2 
  3.     [hello' union select ] => 2 

如果真实sql语句传入上面两个参数合并起来就可以查询出所有信息了,属于sql注入了。

Tags: CodeIgniter URL特殊字符

分享到: