例如,我有这样的输入:
名称: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语句。