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

SQL注入PHP:我需要使用参数化查询验证用户输入吗?,php,sql-injection,validation,parameterized-query,Php,Sql Injection,Validation,Parameterized Query,例如,我有以下输入: 名称:沃利 电子邮件:wallycat@example.com'; 下拉表ClientTable;打印“太糟糕了!”-- 我的参数化查询是: $name = $_REQUEST['name']; $email = $_REQUEST['email']; $sql = "INSERT INTO ClientTable (Name, Email) VALUES ('$name', '$email')"; 即使我使用这个参数化查询,我是否需要验证用户输入?

例如,我有以下输入:

名称:沃利

电子邮件:wallycat@example.com'; 下拉表ClientTable;打印“太糟糕了!”--

我的参数化查询是:

$name = $_REQUEST['name'];

$email = $_REQUEST['email'];

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

        VALUES ('$name', '$email')";
即使我使用这个参数化查询,我是否需要验证用户输入?(在本例中,为电子邮件字段)

或者,由于我正在使用参数化查询,它已经是安全的,并且查询将简单地存储所有这些:'wallycat@example.com'; 下拉表ClientTable;打印“太糟糕了!”——“太糟糕了!”在数据库里


谢谢大家!

您应该做更多类似的事情:

$sql = sprintf("INSERT INTO ClientTable (Name, Email) VALUES ('%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email));

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

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

您可以使用

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

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

这不是一个参数化的查询…一点也不。你可以看到[here][1][1]:不管发生什么,我都会检查用户输入,但也许我只是有点偏执……事实上,我现在很喜欢@JackTurky发布的链接。我不知道那种方法。我只是写了一个PHP包装类来按照我的方式来做,但我可能会改变它。我也写了一个PHP包装类,但我认为没有理由把它改成任何东西谢谢你们的答案和有用的链接。谢谢你们的答案和有用的链接不知道为什么-1+1要使其恢复,请执行以下操作:-)