这被认为是完全安全吗?
$stmt = $dbhandler->prepare("update sometable set somefield=:somestring");
$stmt->bindParam(":somestring",$_REQUEST["hack_me_please"],PDO::PARAM_STR);
$stmt->execute();
如果没有,有什么能让它更安全?我假设PDO / MySQL / PHP中存在未知的漏洞,可能会在将来被利用,所以我想知道是否有任何合理的我可以使我的查询更安全,或者它是用我准备好的语句不在我手中。
如果这很容易,为什么SQL注入仍然是一件事?它不应该像脊髓灰质炎一样吗?
答案 0 :(得分:2)
不,在使用准备好的声明来保护sql
注射时,没有必要对输入进行消毒,但如果您出于任何其他原因,可以这样做。
如果这很容易,为什么SQL注入仍然是一件事?它不应该像脊髓灰质炎一样吗?
对于那些了解它的人来说很容易,除非你知道,否则没有什么是容易的。我相信sql
注射现在不会发生很多。
答案 1 :(得分:1)
您的示例是完全安全的,因为它传递了与查询字符串分开的用户输入参数。 sql注入仍然存在的原因是因为许多用户仍然使用已弃用的mysql_*
api /驱动程序并且不知道替代方案。此外,即使使用pdo或mysqli,您仍然可以将用户输入直接传递给查询字符串,而不是单独绑定它。