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 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
php设计模式 Interpreter(解释器模式)
Jun 26 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
php eval函数一句话木马代码
May 21 PHP
PHP微信支付开发实例
Jun 22 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
php事件驱动化设计详解
Nov 10 PHP
PHP 访问数据库配置通用方法(json)
May 20 PHP
YII框架模块化处理操作示例
Apr 26 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开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php中执行系统命令的方法
2015/03/21 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
学习python处理python编码问题
2011/03/13 Python
Python中无限元素列表的实现方法
2014/08/18 Python
Python中常见的数据类型小结
2015/08/29 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
用python写爬虫简单吗
2020/07/28 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
员工考核管理制度
2014/02/02 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
离婚协议书怎么写
2015/01/26 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
装修公司管理制度
2015/08/05 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
python中sys模块的介绍与实例
2021/04/17 Python
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电