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 mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
Oct 14 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
Apr 26 PHP
PHP导入导出Excel代码
Jul 07 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
php批量删除操作(数据访问)
May 23 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
php+mysql 实现身份验证代码
2010/03/24 PHP
十大使用PHP框架的理由
2015/09/26 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
js module大战
2019/04/19 Javascript
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
python中pass语句用法实例分析
2015/04/30 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
Python实现壁纸下载与轮换
2020/10/19 Python
寄语学生的话
2014/04/10 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
2016年教师新年寄语
2015/08/18 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
Python基础之元编程知识总结
2021/05/23 Python