php如何防注入,由广州中专学校的专业老师给大家说一说。
虽说php的安全比asp要高,php.ini里面也可以设置替换单引号,但也可以绕过。
下面来分析一下php代码
$safe =
关于php如何防注入的问题
 |
www.020bdqn.com |
|
|
|
GET["safe121"];
$sql = “select * from safe121admin where id=”.$safe;
mysql_query($sql);
?>
这是一个很简单的mysql查询的语句,不过可以看到
$safe =
关于php如何防注入的问题
 |
www.020bdqn.com |
|
|
|
GET["safe121"];
$sql = “select * from safe121admin where id=”.$safe;
这里没有经过任何过滤,直接代入查询。
这样一个注入漏洞就产生了。
不过如何防御呢
1.对于输入的是字符型
function safe121replace($string){
$string=str_replace(“‘”,”’”,$string);
$string=str_replace(“select”,”select”,$string);
$string=str_replace(“where”,”where”,$string);
$string=str_replace(“&”,”&”,$string);
$string=str_replace(“&”,”&”,$string);
$string=str_replace(“<","<",$string);
$string=str_replace(“>”,”>”,$string);
return $string;
}
之后 safe121replce(
关于php如何防注入的问题
 |
www.020bdqn.com |
|
|
|
GET["safe121"]);
还可以直接
addslashes(
关于php如何防注入的问题
 |
www.020bdqn.com |
|
|
|
GET["safe121"]);
如果是数字型的,就可以直接
intval(
关于php如何防注入的问题
 |
www.020bdqn.com |
|
|
|
GET["safe121"]);
这样程序就杜绝了sql injection的注入攻击。