PHP魔术引号所带来的安全问题分析


Posted in PHP onJuly 15, 2014

PHP通过提取魔术引号产生的“\”字符会带来一定的安全问题,例如下面这段代码片段:

// foo.php?xigr='ryat
function daddslashes($string, $force = 0) {
!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
if(!MAGIC_QUOTES_GPC || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}
...
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}
echo $xigr['hi'];
// echo \

上面的代码原本期望得到一个经过daddslashes()安全处理后的数组变量$xigr['hi'],但是没有对变量$xigr做严格的类型规定,当我们提交一个字符串变量$xigr='ryat,经过上面的处理变为\'ryat,到最后$xigr['hi']就会输出\,如果这个变量引入到SQL语句,那么就会引起严重的安全问题了,对此再来看下面的代码片段:

...
if($xigr) {
foreach($xigr as $k => $v) {
$uids[] = $v['uid'];
}
$query = $db->query("SELECT uid FROM users WHERE uid IN ('".implode("','", $uids)."')");

利用上面提到的思路,通过提交foo.php?xigr[]='&xigr[][uid]=evilcode这样的构造形式可以很容易的突破GPC或类似的安全处理,形成SQL注射漏洞!对此应给与足够的重视!

PHP 相关文章推荐
PHP 的几个配置文件函数
Dec 21 PHP
php array_slice函数的使用以及参数详解
Aug 30 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 #PHP
PHP文件锁定写入实例解析
Jul 14 #PHP
ThinkPHP惯例配置文件详解
Jul 14 #PHP
2014年10个最佳的PHP图像操作库
Jul 14 #PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 #PHP
mantis安装、配置和使用中的问题小结
Jul 14 #PHP
kohana框架上传文件验证规则写法示例
Jul 14 #PHP
You might like
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
node.js实现带进度条的多文件上传
2020/03/27 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
python中list常用操作实例详解
2015/06/03 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
python 实现让字典的value 成为列表
2019/12/16 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
初中生学习的自我评价
2013/11/14 职场文书
体育教育毕业生自荐信
2013/11/21 职场文书
班组长岗位职责范本
2014/01/05 职场文书
安全生产月演讲稿
2014/05/09 职场文书
小学生倡议书范文
2014/05/13 职场文书
安全生产月标语
2014/10/07 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
MySQL创建管理HASH分区
2022/04/13 MySQL
如何利用python实现列表嵌套字典取值
2022/06/10 Python