这段代码是否足以防止sql注入
if(isset($_POST['Submit']))
{
$user = mysql_real_escape_string($_POST["user"]);
$pass = mysql_real_escape_string($_POST["pass"]);
$confirm_key=md5(uniqid(rand()));
$query = mysql_query("INSERT INTO members
(user, pass, mail, confirm_key, country, city, www, credo)
VALUES ('$user','$pass','$_POST[mail]','$confirm_key','$_POST[country]','$_POST[city]','$_POST[www]','$_POST[credo]')")
or die ("Error during INSERT INTO members: " . mysql_error());
exit();
}
这是正确的方式,必须保护每个输入(如国家,城市......)吗?
答案 0 :(得分:5)
请勿使用 mysql_query
申请新申请。您应该使用mysqli
或PDO与占位符进行转义。您可以使用many examples。
通常,您的SQL应如下所示:
INSERT INTO `table` (column) VALUES (?)
不应该看起来像:
INSERT INTO `table` (column) VALUES('$dangerous_user_content')
如果正确使用占位符,则几乎不可能创建SQL注入漏洞。
答案 1 :(得分:1)
http://php.net/manual/en/function.mysql-real-escape-string.php
即使是php文档也说不要使用mysql_real_escape_string