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 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
一个改进的UBB类
Oct 09 PHP
使用adodb lite解决问题
Dec 31 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
php学习笔记 类的声明与对象实例化
Jun 13 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
php缓存技术详细总结
Aug 07 PHP
php中关于socket的系列函数总结
May 18 PHP
php获取一定范围内取N个不重复的随机数
May 28 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
PHP获取HTTP body内容的方法
Dec 31 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 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
React组件生命周期详解
2017/07/03 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
Python实现扫码工具的示例代码
2020/10/09 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
大学运动会通讯稿
2014/01/28 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
婚前协议书范本
2014/10/27 职场文书
2014年团队工作总结
2014/11/24 职场文书
归元寺导游词
2015/02/06 职场文书
白银帝国观后感
2015/06/17 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python
MySQL 语句执行顺序举例解析
2022/06/05 MySQL
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技