如何保护PHP中的SQL不受SQL注入?

时间:2010-12-17 18:39:19

标签: php sql sql-injection

有人可以给我一些帮助吗?我有三个PHP SQL查询,我必须保护免受SQL注入。我在谷歌上搜索,但我认为对我来说太难了,因为它与PHP结合,我不知道关于PHP和关于SQL的问题

如果有人能给我保护代码,我将不胜感激

代码:

$q=mysql_query("SELECT * FROM user where email= '".$_REQUEST['email']."'",$link );

$q=mysql_query("UPDATE user SET mobilePhone='".$_REQUEST['mobilePhone']."', fullName='".$_REQUEST['fullName']."' WHERE email='".$_REQUEST['email']."'",$link );

$q=mysql_query("UPDATE user SET mobilePhone='".$_REQUEST['mobilePhone']."' , fullName='".$_REQUEST['fullName']."', password='".$_REQUEST['password']."'  WHERE email='".$_REQUEST['email']."'",$link );

3 个答案:

答案 0 :(得分:2)

防止SQL注入的最小办法是在进入查询的任何变量之前使用mysql_real_escape_string函数。

您可以做的最好的事情是use prepared statements以避免SQL注入。

  

准备语句的参数   不需要引用;司机   自动处理这个。 如果是   应用程序专用于准备   声明,开发人员可以肯定   不会发生SQL注入   (但是,如果其他部分   查询正在建立   未转义的输入,SQL注入是   仍然可能)。

<强>建议:

为了更安全,您应该始终使用正确的数组,例如$_POST$_GET,而不是$_REQUEST出于安全原因。

答案 1 :(得分:2)

嗯,简单的方法是在mysql_real_escape_string()中包装每个$_REQUEST变量......

$q=mysql_query("SELECT * FROM user 
    where email= '".mysql_real_escape_string($_REQUEST['email'])."'",$link );

更好的方法是使用准备好的查询。有很多关于如何做的教程,所以我会把它留给你......

答案 2 :(得分:1)

看一下PHP的mysql_real_escape_string