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大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
form自动提交实例讲解
Jul 10 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 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 Memcache 中实现消息队列
2009/11/24 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
python连接mysql有哪些方法
2020/06/24 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
厂长岗位职责
2014/02/19 职场文书
销售员试用期自我评价
2014/09/15 职场文书
毕业生见习报告总结
2014/11/08 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android