用PHP函数解决SQL injection

大公无私bathb

大公无私bathb

2016-01-29 14:58

用PHP函数解决SQL injection,用PHP函数解决SQL injection
 

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);

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)

//如果你再从数据库内提取这个记录并输出,就会看到 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;
}
?

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)


 

 
展开更多 50%)
分享

猜你喜欢

用PHP函数解决SQL injection

PHP
用PHP函数解决SQL injection

一个asp函数 解决SQL Injection漏洞

Web开发
一个asp函数 解决SQL Injection漏洞

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

一个asp函数 解决SQL Injection漏洞

ASP
一个asp函数  解决SQL Injection漏洞

Advanced SQL Injection with MySQL

编程语言 网络编程
Advanced SQL Injection with MySQL

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用SQL进行函数查询

编程语言 网络编程
用SQL进行函数查询

vBulletin Forum 2.3.xx SQL Injection

Web开发
vBulletin Forum 2.3.xx SQL Injection

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

PS教程!如何调出摄影师Joanna的经典阴郁后期风格?

PS教程!如何调出摄影师Joanna的经典阴郁后期风格?

Access数据库技术(61)

Access数据库技术(61)
下拉加载更多内容 ↓