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自动更新新闻DIY
Oct 09 PHP
PHP COOKIE设置为浏览器进程
Jun 21 PHP
PHP遍历二维数组的代码
Apr 22 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
php合并数组中相同元素的方法
Nov 13 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP连接MongoDB示例代码
2012/09/06 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
jquery 无限级联菜单案例分享
2013/03/26 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
Node.js实现数据推送
2016/04/14 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
2019/08/16 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
用Python创建声明性迷你语言的教程
2015/04/13 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
python Selenium 库的使用技巧
2020/10/16 Python
pycharm实现猜数游戏
2020/12/07 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
护理实习自我鉴定
2013/12/14 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
给全校老师的建议书
2014/03/13 职场文书
工作年限证明模板
2014/11/01 职场文书
教师求职自荐信范文
2015/03/04 职场文书
通用员工手册范本
2015/05/14 职场文书