sql注入与转义的php函数代码


Posted in PHP onJune 17, 2013

sql注入:

正常情况下:

delete.php?id=3;

$sql = 'delete from news where id = '.$_GET['id'];

恶意情况:

delete.php?id=3 or 1;

$sql = 'delete from news where id = 3 or 1';  -------如此执行后,所有的记录将都被删除

 应该采取相关措施。。。比如用之前先判断是否是数字等等。

要使自己相信,从客户端传来的信息永远是不可靠的!!

转义:

有时候从客户端传来的数据,可能恶意包含些特殊的字符,比如单引号、斜杠等,所以需要转义,转义成普通的字符,此时就要用到string addslashes ( string $str ),这个函数可以对某个变量进行转义。但是,如果对数组里的元素进行转义,就用foreach循环数组,如下:

foreach($_POST as $k=>$v) {
    
if(is_string($v)) {
        $_POST[$k] = addslashes($v);
    
}

}

但是如果数组中还包含数组,那就要递归进行转义了,此时用到

array_walk_recursive(array &$input , callback $funcname [, mixed $userdata ])

          

将用户自定义函数 funcname 应用到 array 数组中的每个单元。本函数会递归到更深层的数组中去。典型情况下 funcname 接受两个参数。input 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname。成功时返回 TRUE, 或者在失败时返回 FALSE

也就是说:用自定义的函数,至少要能接收两个参数,而addslashes()只能接收一个参数所以自定义一个函数如下:

function a(&$v,$k){




$v=addslashes($v);



}



array_walk_recursive(&$arr,'a');

 系统自动转义:

PHP中,有一个魔术引号的概念,如何打开?答:在PHP.ini中,magic_quotes_gpc=On;重启apache即可

魔术引号被打开后,系统会自动对$_GET,$_POST,$_COOKIE数据进行转义,在不知情的情况下,再次进行手动转义的话,就转多了,要想合理的进行转义,就要首先判断,魔术符号是否已经打开了,用magic_quotes_gpc()进行判断,不需要传值,关闭返回0,关闭返回1

if(!get_magic_quotes_gpc()) {  // 如果魔术引号没开

    
function _addslashes(&$v,$k) {
       
 $v = addslashes($v);
  
  }
   
 array_walk_recursive(&$_GET,'_addslashes');
    
array_walk_recursive(&$_POST,'_addslashes');
   
 array_walk_recursive(&$_COOKIE,'_addslashes');

}
PHP 相关文章推荐
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
Jan 22 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
yii框架使用分页的方法分析
Jul 25 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
Laravel框架源码解析之反射的使用详解
May 14 PHP
PHP常用header头定义代码示例汇总
Aug 29 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 #PHP
PHP之短标签开启设置
Jun 17 #PHP
深入掌握include_once与require_once的区别
Jun 17 #PHP
php抓取页面的几种方法详解
Jun 17 #PHP
深入PHP magic quotes的详解
Jun 17 #PHP
php错误级别的设置方法
Jun 17 #PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 #PHP
You might like
php调整服务器时间的方法
2015/04/03 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
Javascript模板技术
2007/04/27 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
python3中property使用方法详解
2019/04/23 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python障碍式期权定价公式
2019/07/19 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
某某同志考察材料
2014/05/28 职场文书
安全施工标语
2014/06/07 职场文书
死亡赔偿协议书
2015/01/28 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
婚庆答谢词大全
2015/09/29 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python
Python 多线程处理任务实例
2021/11/07 Python
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL