我正在开发一个网络应用,但我遇到了这段代码
$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);
我在这里有正确的想法吗?
答案 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)