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边学边教》(01.开篇――准备工作)
Dec 13 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
PHP HTML代码串 截取实现代码
Jun 29 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
php中explode函数用法分析
Nov 15 PHP
php中explode的负数limit用法分析
Feb 27 PHP
php安装swoole扩展的方法
Mar 19 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 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中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
浅谈 vue 中的 watcher
2017/12/04 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
python实现屏保计时器的示例代码
2018/08/08 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
python学习开发mock接口
2019/04/28 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
物理教师自荐信范文
2013/12/28 职场文书
申请任职学生会干部自荐书范文
2014/02/13 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
现场活动策划方案
2014/08/22 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers