SQL注入PHP:我需要使用参数化查询验证用户输入吗?
例如,我有以下输入: 名称:沃利 电子邮件:wallycat@example.com'; 下拉表ClientTable;打印“太糟糕了!”-- 我的参数化查询是: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')"; 即使我使用这个参数化查询,我是否需要验证用户输入?
$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要使其恢复,请执行以下操作:-)