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 相关文章推荐
PHP与javascript对多项选择的处理
Oct 09 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 PHP
phalcon框架使用指南
Feb 23 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
PHP如何将XML转成数组
Apr 04 PHP
php 访问oracle 存储过程实例详解
Jan 08 PHP
php删除数组指定元素实现代码
May 03 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
PHP中递归的实现实例详解
Nov 14 PHP
php插入mysql数据返回id的方法
May 31 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版国家代码、缩写查询函数代码
2011/08/14 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
javascript基本语法分析说明
2008/06/15 Javascript
Prototype使用指南之selector.js说明
2008/10/26 Javascript
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
javascript 数组排序函数
2009/08/20 Javascript
ext 同步和异步示例代码
2009/09/18 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
javascrit中undefined和null的区别详解
2019/04/07 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
Python3.2中Print函数用法实例详解
2015/05/19 Python
Django中处理出错页面的方法
2015/07/15 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
运动会通讯稿150字
2014/02/15 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
花木兰观后感
2015/06/10 职场文书
高一化学教学反思
2016/02/22 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript