php防范sql注入方法与实例代码
本文导语: php防范sql注入是一个非常重要的安全手段。 一个优秀的php程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力。今天我们要向大家讲解的是有关php防范sql注入的相关方法。 说到网站安全就不得不提到sql...
php防范sql注入是一个非常重要的安全手段。
一个优秀的php程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力。今天我们要向大家讲解的是有关php防范sql注入的相关方法。
说到网站安全就不得不提到sql注入(sql injection),如果你用过asp,对sql注入一定有比较深的理解,php的安全性相对较高,这是因为mysql4以下的版本不支持子语句,而且当php.ini里的 magic_quotes_gpc 为on 时。
提交的变量中所有的 ' (单引号), " (双引号), (反斜线) and 空字符会自动转为含有反斜线的转义字符,给sql注入带来不少的麻烦。
请看清楚:“麻烦”而已~这并不意味着php防范sql注入,书中就讲到了利用改变注入语句的编码来绕过转义的方法,比如将sql语句转成ascii编码(类似:char(100,58,92,108,111,99,97,108,104,111,115,116…)这样的格式),或者转成16进制编码,甚至还有其他形式的编码,这样以来,转义过滤便被绕过去了,那么怎样防范呢:
a. 打开magic_quotes_gpc或使用addslashes()函数
在新版本的php中,就算magic_quotes_gpc打开了,再使用addslashes()函数,也不会有冲突,但是为了更好的实现版本兼容,建议在使用转移函数前先检测magic_quotes_gpc状态,或者直接关掉,代码如下:
php防范sql注入的代码
function stripslashes_array($array) {
if (is_array($array)) {
foreach ($array as $k => $v) {
$array[$k] = stripslashes_array($v);
}
} else if (is_string($array)) {
$array = stripslashes($array);
}
return $array;
}
@set_magic_quotes_runtime(0);
// 判断 magic_quotes_gpc 状态
if (@get_magic_quotes_gpc()) {
$_get = stripslashes_array($_get);
$_post = stripslashes_array($_post);
$_cookie = stripslashes_array($_cookie);
}
去除magic_quotes_gpc的转义之后再使用addslashes函数,代码如下:
php防范sql注入的代码
$keywords = str_replace("_","_",$keywords);//转义掉”_”
$keywords = str_replace("%","%",$keywords);//转义掉”%”
后两个str_replace替换转义目的是防止黑客转换sql编码进行攻击。
b. 强制字符格式(类型)
在很多时候我们要用到类似xxx.php?id=xxx这样的url,一般来说$id都是整型变量,为了防范攻击者把$id篡改成攻击语句,我们要尽量强制变量,代码如下:
php防范sql注入的代码
$id=intval($_get['id']);
当然,还有其他的变量类型,如果有必要的话尽量强制一下格式。
c. sql语句中包含变量加引号
这一点儿很简单,但也容易养成习惯,先来看看这两条sql语句:
select * from article where articleid=$id
两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的sql语句,也不会正常执行,而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为sql语句执行,因此,我们要养成给sql语句中变量加引号的习惯。
d.url伪静态化
url伪静态化也就是url重写技术,像discuz!一样,将所有的url都rewrite成类似xxx-xxx-x.html格式,既有利于seo,又达到了一定的安全性,也不失为一个好办法。但要想实现php防范sql注入,前提是你得有一定的“正则”基础。
- php过滤特殊字符sql防注入代码
- php防SQL注入代码(360提供)
- php防止SQL注入攻击与XSS攻击的方法
- php防范SQL注入攻击与XSS攻击的方法详解
- php防止SQL注入的方法分享
- php防范sql注入的一些代码收集
- php实现防注入与表单提交值转义的代码
- php防止sql注入的方法解析
- php 防注入的一段代码(过滤参数)
- 学习php的防SQL注入函数:mysql_real_escape_string
- 简明易懂的php sql防注入代码
- php防止sql注入的代码
- php实现sql防止注入的几种方法
- 一个不错的php通用防注入程序
- php防止sql注入正则过滤一例
- php防止SQL注入的函数