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 相关文章推荐
php 更新数据库中断的解决方法
Jun 05 PHP
php数组编码转换示例详解
Mar 11 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
php搜索文件程序分享
Oct 30 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
thinkphp5实现微信扫码支付
Dec 23 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魔术方法__GET、__SET使用实例
2014/11/25 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
Mac下安装vue
2018/04/11 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
python django集成cas验证系统
2014/07/14 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
Python3 中文文件读写方法
2018/01/23 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
会计电算化个人自我评价
2013/11/17 职场文书
公司活动邀请函
2014/01/24 职场文书
高一化学教学反思
2014/02/05 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
开幕式邀请函
2015/01/31 职场文书
评职称个人总结
2015/03/05 职场文书
物业保安辞职信
2015/05/12 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
Python Pandas常用函数方法总结
2021/06/15 Python
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技