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错误提示的关闭方法详解
Jun 23 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
laravel 5 实现模板主题功能(续)
Mar 02 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
PHP抽象类基本用法示例
Dec 28 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
Feb 16 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 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版(4)
2006/10/09 PHP
第十一节--重载
2006/11/16 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
python实现的jpg格式图片修复代码
2015/04/21 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
python模块之re正则表达式详解
2017/02/03 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
python如何处理程序无法打开
2020/06/16 Python
工业自动化毕业生自荐信范文
2014/01/04 职场文书
《童年》教学反思
2014/02/18 职场文书
购房协议书
2014/04/11 职场文书
主持稿开场白
2015/06/01 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
Nginx限流和黑名单配置
2022/05/20 Servers