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 相关文章推荐
1.PHP简介
Oct 09 PHP
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
一个简单的php加密解密函数(动态加密)
Jun 19 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
php+mysql实现无限级分类
Nov 11 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
php7 图形用户界面GUI 开发示例
Feb 22 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 JSON 数据解析代码
2010/05/26 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
BootStrap selectpicker
2016/06/20 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
python中黄金分割法实现方法
2015/05/06 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
pycharm快捷键汇总
2020/02/14 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
奥巴马竞选演讲稿
2014/05/15 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL