Date: 2009-12-21 00:00:00

sql注入的方法以及PHP防注入

sql注入是攻击网站的常用一种方法,如何防止sql注入式攻击是每个PHP网站程序员必须掌握的能力,不能贪图自己的方便,而不做一些力所能及的措施,千疮百孔的网站不是一个好网站,那么如何防止这种攻击呢?首先,我们要了解这种工具的实质。

举一个简单例子,我们已知网站有一个名为user的表,
id name mail        tel    old
1  bob  12#qq.com          25
2  jim  jim#tom.com        33
3  kate kate#olserve.cn    28
4  shuzi  sz#shangxian.net  20
5  zz   zz#mzdjx.com           39
6  wu   wuz123#baidu.com        46
当然这个网站没有做任何安全措施,一般网站都有数据提交功能,我们就在提交框中加入“二维‘)’delete from user where id >= 2”,打开网站数据库,我们会发现user表只有一条id=1的数据了。

这是为什么呢,请看真正执行的语句就明白了,insert into message(mes) values(‘二维’)delete from user where id>=2,这里有两条SQL语句,其中一条delete语句是我们加上去的,这就是sql注入的方法,当然,其中有几个关键点,表的名称,可以和数据库交互的途径。//()‘’改为英文

我们就按这两个途径来预防注入攻击,第一种方法是更改表的名称,不使用user,admin,products等常见的,第二方法是在php.ini中将magic_quotes设置为On,使用mysql_real_escape_string()函数,案例:
$sql = “UPDATE my-user SET
y-name=‘.mysql_real_escape_string($y-name).’
WHERE id=‘.mysql_real_escape_string ($id).’”; //‘’“”改为英文的
mysql_query($sql);
?>
上面这种方法是针对PHP+MySQL的,语言如.net、asp、jsp,数据库如access、sql、orical的攻击在本质上是一样的,防治方法大同小异。