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


Posted in PHP onFebruary 28, 2019

本文实例分析了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注入了

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
文件上传程序的全部源码
Oct 09 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
php 获取本地IP代码
Jun 23 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 PHP
PHP实现抽奖功能实例代码
Jun 30 PHP
PHP删除数组中特定元素的两种方法
Feb 28 #PHP
PHP实时统计中文字数和区别
Feb 28 #PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 #PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 #PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 #PHP
asp函数split()对应php函数explode()
Feb 27 #PHP
PHP中引用类型和值类型功能与用法示例
Feb 26 #PHP
You might like
索尼ICF-SW100收音机评测
2021/03/02 无线电
php正则
2006/07/07 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php异常处理使用示例
2014/02/25 PHP
php的ajax简单实例
2014/02/27 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
PHP代码优化技巧小结
2015/09/29 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
JS版网站风格切换实例代码
2008/10/06 Javascript
Prototype使用指南之selector.js说明
2008/10/26 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
python配置文件写入过程详解
2019/10/19 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
市场营销调查计划书
2014/05/02 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
淘宝好评语句大全
2014/12/31 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS