1

例如,我有这个输入:

姓名沃利

电子邮件wallycat@example.com'; 删除表客户端表;打印“太糟糕了!”--

我的参数化查询是:

$name = $_REQUEST['name'];

$email = $_REQUEST['email'];

$sql = "INSERT INTO ClientTable (Name, Email)

        VALUES ('$name', '$email')";

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

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

谢谢!

4

3 回答 3

2

您可以使用

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");
于 2012-02-27T16:28:25.493 回答
1

你应该做更多这样的事情:

$sql = sprintf("INSERT INTO ClientTable (Name, Email) VALUES ('%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email));
于 2012-02-27T16:21:50.677 回答
0

参数化查询负责转义。不过,您可能仍然想验证数据。例如,您可能希望确保该电子邮件至少类似于user@domain,电话号码仅包含数字等。尽管存在一些重叠,但这更多的是关于数据完整性而不是安全性。

但是,您在示例中不使用参数化查询,而只是使用变量替换。参数化查询将暗示准备好的语句。

于 2012-02-27T16:22:05.157 回答