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项目打包方法
Feb 18 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
PHP中设置时区方法小结
Jun 03 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php 魔术方法详解
Nov 11 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
PHP判断是否是json字符串
Apr 01 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php基础知识:函数基础知识
2006/12/13 PHP
openPNE常用方法分享
2011/11/29 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
php微信公众号开发模式详解
2016/11/28 PHP
简明json介绍
2008/09/28 Javascript
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
Python的一些用法分享
2012/10/07 Python
Python 命令行非阻塞输入的小例子
2013/09/27 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
销售副总经理岗位职责
2013/12/11 职场文书
关于幼儿的自我评价
2013/12/18 职场文书
银行服务感言
2014/03/01 职场文书
汽车促销活动方案
2014/03/31 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
python内置模块之上下文管理contextlib
2022/06/14 Python