用PHP函数解决SQL injection 作者:lm92 来源:CSDN

原创 2004年06月23日 22:38:00

SQL injection问题在ASP上可是闹得沸沸扬扬当然还有不少国内外著名的PHP程序“遇难”。至于SQL injection的详情,网上的文章太多了,在此就不作介绍。
如果你网站空间的php.ini文件里的magic_quotes_gpc设成了off,那么PHP就不会在敏感字符前加上反斜杠(/),由于表单提交的内容可能含有敏感字符,如单引号('),就导致了SQL injection的漏洞。在这种情况下,我们可以用addslashes()来解决问题,它会自动在敏感字符前添加反斜杠。
但是,上面的方法只适用于magic_quotes_gpc=Off的情况。作为一个开发者,你不知道每个用户的magic_quotes_gpc是On还是Off,如果把全部的数据都用上addslashes(),那不是“滥杀无辜”了?假如magic_quotes_gpc=On,并且又用了addslashes()函数,那让我们来看看:

<?php
//如果从表单提交一个变量$_POST['message'],内容为 Tom's book
//这此加入连接MySQL数据库的代码,自己写吧
//在$_POST['message']的敏感字符前加上反斜杠
$_POST['message'] = addslashes($_POST['message']);

//由于magic_quotes_gpc=On,所以又一次在敏感字符前加反斜杠
$sql = "INSERT INTO msg_table VALUE('$_POST[message]');";

//发送请求,把内容保存到数据库内
$query = mysql_query($sql);

//如果你再从数据库内提取这个记录并输出,就会看到 Tom/'s book
?>

这样的话,在magic_quotes_gpc=On的环境里,所有输入的单引号(')都会变成(/')……
其实我们可以用get_magic_quotes_gpc()函数轻易地解决这个问题。当magic_quotes_gpc=On时,该函数返回TRUE;当magic_quotes_gpc=Off时,返回FALSE。至此,肯定已经有不少人意识到:问题已经解决。请看代码:

<?php
//如果magic_quotes_gpc=Off,那就为提单提交的$_POST['message']里的敏感字符加反斜杠
//magic_quotes_gpc=On的情况下,则不加
if (!get_magic_quotes_gpc()) {
$_POST['message'] = addslashes($_POST['message']);
} else {}
?>

其实说到这里,问题已经解决。下面再说一个小技巧。
有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET)那就自定义一个可以“横扫千军”的函数:

<?php
function quotes($content)
{
//如果magic_quotes_gpc=Off,那么就开始处理
if (!get_magic_quotes_gpc()) {
//判断$content是否为数组
if (is_array($content)) {
//如果$content是数组,那么就处理它的每一个单无
foreach ($content as $key=>$value) {
$content[$key] = addslashes($value);
}
} else {
//如果$content不是数组,那么就仅处理一次
addslashes($content);
}
} else {
//如果magic_quotes_gpc=On,那么就不处理
}
//返回$content
return $content;
}
?>

MyBatis与Druid数据库连接池集成监控统计后WallFilterSQL注入异常问题处理方案

数据库连接池使用的是阿里巴巴的Druid(德鲁伊)。项目中启用了Druid的统计管理,在执行批量修改时提示;Caused by: java.sql.SQLException: sql injectio...
  • boonya
  • boonya
  • 2017年04月18日 17:35
  • 4165

PHP防止SQL注入

我们在查询数据库时,出于安全考虑,需要过滤一些非法字符防止SQL恶意注入,请看一下函数:代码如下:function injCheck($sql_str) { $check = preg_m...
  • loveinc
  • loveinc
  • 2017年03月29日 10:22
  • 364

KafkaOffsetMonitor:监控消费者和延迟的队列

转载至  :  http://orchome.com/54 一个小应用程序来监视kafka消费者的进度和它们的延迟的队列。 KafkaOffsetMonitor是用来实时监控Kaf...
  • whjcsdnwhj
  • whjcsdnwhj
  • 2017年10月18日 22:24
  • 83

php自带的几个防止sql注入的函数规则

SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录...
  • su_dong
  • su_dong
  • 2016年07月20日 19:07
  • 1633

PHP几个防SQL注入攻击自带函数区别

SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的纪录...
  • dyt19941205
  • dyt19941205
  • 2016年07月11日 21:49
  • 3239

如何防止SQL注入攻击

如何防止SQL注入攻击            一、什么是SQL注入式攻击?   所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行...
  • shenxiuwen1989
  • shenxiuwen1989
  • 2015年03月12日 17:32
  • 1229

PHP 使用list函数each函数遍历数组(实现foreach)解析

PHP 使用list函数each函数遍历数组(实现foreach)解析   直接进入主题吧。 先看看list函数: list() 函数用于在一次操作中给一组变量赋值,并且无限参数(参数超过索引数组里元...
  • qq_26683009
  • qq_26683009
  • 2016年03月25日 12:32
  • 2282

前端面试题汇总 作者: resharpe 链接:http://www.imooc.com/article/10057 来源:慕课网

第一部分HTML&CSS 1. 浏览器分类 浏览器:IE,Chrome,FireFox,Safari,Opera。内核:Trident,Gecko,Presto,Webkit。 ...
  • Frankywls
  • Frankywls
  • 2017年04月14日 23:56
  • 447

PHP漏洞全解(二)-命令注入攻击

本文主要介绍针对PHP网站常见的攻击方式中的命令攻击。Command Injection,即命令注入攻击,是指这样一种攻击手段,黑客通过把HTML代码输入一个输入机制(例如缺乏有效验证限制的表格域)来...
  • lanbingkafei
  • lanbingkafei
  • 2013年04月29日 12:12
  • 480

php 使用curl模拟ip和来源进行访问

对于限制了ip和来源的网站,使用正常的访问方式是无法访问的。本文将介绍一种方法,使用php的curl类实现模拟ip和来源,访问那些限制了ip和来源的网站。...
  • fdipzone
  • fdipzone
  • 2017年02月23日 22:04
  • 17903
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用PHP函数解决SQL injection 作者:lm92 来源:CSDN
举报原因:
原因补充:

(最多只允许输入30个字)