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模板技术原理【一】
Jan 10 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
Jul 13 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
Symfony2 session用法实例分析
Feb 04 PHP
Yii2分页的使用及其扩展方法详解
May 23 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 17 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 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 Undefined index的问题
2009/06/01 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
用实例解释Python中的继承和多态的概念
2015/04/27 Python
详解Python的Django框架中的模版相关知识
2015/07/15 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
财务会计应届生求职信
2013/11/24 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
聘用意向书
2014/07/29 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书