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连接MySQL代码的参数说明
Jun 07 PHP
简单示例AJAX结合PHP代码实现登录效果代码
Jul 25 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
php中在PDO中使用事务(Transaction)
May 14 PHP
PHP源码之explode使用说明
Aug 05 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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 一元分词算法
2009/11/30 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
Stop SQL Server
2007/06/21 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python多线程和队列操作实例
2015/06/21 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python算术运算符实例详解
2017/05/31 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
如何使用python操作vmware
2019/07/27 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
基于Python实现简单学生管理系统
2020/07/24 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
国际会计专业求职信
2014/08/04 职场文书
车辆转让协议书
2014/09/24 职场文书
学生违反校规检讨书
2014/10/28 职场文书
店铺转让协议书
2014/12/02 职场文书
优秀教师个人材料
2014/12/15 职场文书
小浪底导游词
2015/02/12 职场文书
交通事故被告代理词
2015/05/23 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android