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 相关文章推荐
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
php判断一个数组是否为有序的方法
Mar 27 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
PHP强制转化的形式整理
May 22 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+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
Django添加sitemap的方法示例
2018/08/06 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python 变量初始化空列表的例子
2019/11/28 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
python绘制高斯曲线
2021/02/19 Python
python实现图片转字符画的完整代码
2021/02/21 Python
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
Java程序员综合测试题
2014/04/25 面试题
工程造价专业大学生自荐信
2013/10/01 职场文书
带你了解Java中的ForkJoin
2022/04/28 Java/Android