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经典的给图片加水印程序
Dec 06 PHP
php与php MySQL 之间的关系
Jul 17 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
yii中widget的用法
Dec 03 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
php fread函数使用方法总结
May 28 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 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
对盗链说再见...
2006/10/09 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
yii操作cookie实例简介
2014/07/09 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
一个Python最简单的接口自动化框架
2018/01/02 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
Python笔记之观察者模式
2019/11/20 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
用Python进行websocket接口测试
2020/10/16 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
工商管理毕业生推荐信
2013/12/24 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
安全生产工作汇报
2014/10/28 职场文书
学生检讨书
2015/01/27 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
文书工作总结(范文)
2019/07/11 职场文书
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
MySQL查询日期时间
2022/05/15 MySQL