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 相关文章推荐
第五节 克隆 [5]
Oct 09 PHP
php生成文件
Jan 15 PHP
php中cookie的使用方法
Mar 29 PHP
JS异常处理try..catch语句的作用和实例
May 05 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
php文件上传类完整实例
May 14 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 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 array操作10个小技巧分享
2011/06/23 PHP
基于php iconv函数的使用详解
2013/06/09 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
Python列表append和+的区别浅析
2015/02/02 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Python如何使用字符打印照片
2020/01/03 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
工商技校毕业生自荐信
2013/11/15 职场文书
会计专业导师推荐信
2014/03/08 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
诉讼授权委托书
2014/10/15 职场文书
七年级作文之英语老师
2019/10/28 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers