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 相关文章推荐
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
PHP排序算法类实例
Jun 17 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
PHP学习记录之数组函数
Jun 01 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
php实现session共享的实例方法
Sep 19 PHP
php判断目录存在的简单方法
Sep 26 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
Oct 09 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 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
php遍历数组的方法分享
2012/03/22 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
JQuery优缺点分析说明
2011/04/10 Javascript
js常用代码段收集
2011/10/28 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
vue mounted组件的使用
2018/06/18 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
Python中类型关系和继承关系实例详解
2015/05/25 Python
python如何读写json数据
2018/03/21 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
银行内勤岗位职责
2014/04/09 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
元宵节晚会主持词
2015/07/01 职场文书
值班管理制度范本
2015/08/06 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS