这个PHP代码是否打开了一个SQL注入网站

时间:2011-05-23 16:24:12

标签: php sql security sql-injection

我正在开发一个网络应用,但我遇到了这段代码

$email=$_POST['email'];
$pass=$_POST['pass'];
$pass=md5($pass);
$query=mysql_real_escape_string($email,$link);
//echo $query."<br>";
$sql=mysql_query("SELECT pass FROM users WHERE email='".$email."'",$link);
if($row=mysql_fetch_array($sql))
{

我认为程序员打算$query=mysql_real_escape_string($email,$link);$email=mysql_real_escape_string($email,$link);

我在这里有正确的想法吗?

3 个答案:

答案 0 :(得分:5)

是的,你是绝对正确的 - 只要纠正那个部分,就像你说的那样,把它改成

 $email = mysql_real_escape_string($email, $link);

,这将防止SQL注入。

另外,我建议您使用hash("sha512", xxx)代替md5,因为MD5已经过时了。如果您的列大小不允许,但您无法更改它,那么它仍然可以。

答案 1 :(得分:2)

是的,$email已设置,但未经过滤,则会直接在查询中使用。正如您所指出的那样,它看起来像是一个错误,因为查询中没有使用过滤后的值。

答案 2 :(得分:1)

为防止盲目SQL,请使用两个以上的过滤器包装您的POST数据:

$email = mysql_real_escape_string(strip_tags(stripslashes($email)), $link)