SQL注入PHP:我需要使用参数化查询来验证用户输入吗


SQL Injection PHP: Do I need to validate the user input using parameterized queries?

例如,我有这样的输入:

名称Wally

电子邮件wallycat@example.com';DROP TABLE ClientTable;打印"太糟糕了!"--

我的参数化查询是:

$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$sql = "INSERT INTO ClientTable (Name, Email)
        VALUES ('$name', '$email')";

即使我使用这个参数化查询,我是否需要验证用户输入?(在这种情况下,为电子邮件字段)

或者,已经是安全的,因为我使用的是参数化查询,并且查询将简单地存储所有这些:'wallycat@example.com';DROP TABLE ClientTable;打印"太糟糕了!"--"数据库中?

谢谢!

您可以使用

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);
mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

您应该做一些类似的事情:

$sql = sprintf("INSERT INTO ClientTable (Name, Email) VALUES ('%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email));
参数化查询负责转义。不过,您可能仍然需要验证数据。例如,你可能想确保电子邮件至少是user@domain,电话号码只由数字等组成。这更多的是关于数据完整性,而不是安全性,尽管有一些重叠。

然而,在您的示例中,您没有使用参数化查询,而是使用变量替换。参数化查询意味着一个Prepared语句。