4

可能重复:
在 PHP 中防止 SQL 注入的最佳方法

这段代码是否受到足够的保护以防止 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();
}

这是正确的方法吗?必须保护每个输入(如国家、城市……)?

4

2 回答 2

5

请勿 mysql_query用于新应用。您应该使用mysqli或 PDO 使用占位符进行转义。您可以使用许多示例。

通常,您的 SQL 应如下所示:

INSERT INTO `table` (column) VALUES (?)

不应该看起来像:

INSERT INTO `table` (column) VALUES('$dangerous_user_content')

如果正确使用占位符,几乎不可能创建 SQL 注入漏洞。

于 2012-08-02T20:57:45.800 回答
1

http://php.net/manual/en/function.mysql-real-escape-string.php

甚至 php 文档都说不要使用 mysql_real_escape_string

于 2012-08-02T21:01:41.397 回答