【发布时间】:2011-08-24 13:09:45
【问题描述】:
我知道你们中的一些人可能会结束这个问题,但我的问题是由你们和你们的回答提出的。我正在阅读过去两个小时的 SQL 注入问题和答案以及如何保护您的数据库。我看到的大量网页和教程也是如此。
我发现一半的人声称 prepare 语句确实保护了您的数据库,而另外 50 人声称它不是。
另一方面,我读到 mysql_real_escape_string 可以完成这项工作,而其他人则说不是。
我的问题是该相信谁?
另外,这是一个正确的准备语句吗?
$stmt = $dbh->prepare("SELECT phpro_user_id, phpro_username, phpro_password FROM phpro_users
WHERE phpro_username = :phpro_username AND phpro_password = :phpro_password");
/*** bind the parameters ***/
$stmt->bindParam(':phpro_username', $phpro_username, PDO::PARAM_STR);
$stmt->bindParam(':phpro_password', $phpro_password, PDO::PARAM_STR, 40);
/*** execute the prepared statement ***/
$stmt->execute();
【问题讨论】:
-
我还想补充一点,防止 SQL 注入只是“保护数据库”的一部分。保护您的数据库还需要正确设置权限、字符串密码、锁定对服务器的访问权限,以及可能不会立即想到的其他几个因素。