【问题标题】:Omitting bindParam with PDO is safe?用 PDO 省略 bindParam 是否安全?
【发布时间】:2014-06-07 11:17:46
【问题描述】:

我想知道是否强制使用 bindParam 以防止使用 PDO 和 MYSQL 进行 SQL 注入。

例子:

$username=$_POST['username'];
$password=$_POST['password'];
$cryptpass=hashFunction($password);
$sth=$dbh->prepare("INSERT INTO users(username,password) VALUES(?,?)");
$sth->execute(array($username,$cryptpass));

编写此代码是否安全且正确?省略 bindParam 会使代码更短。

【问题讨论】:

标签: php mysql security pdo sql-injection


【解决方案1】:

这仍然将值绑定到准备好的语句。您正在做与使用 bindParam 函数相同的事情。所以答案是肯定的,它同样安全。 bindParam 只是允许更多的功能,而不是简单地与 execute 函数绑定,例如:

$sth=$dbh->prepare("Select * from users where status=:v1");
$sth->bindParam(':v1',1,PDO::PARAM_INT);
$sth->execute();

这允许您在默认情况下指定data_typeexecute,所有内容都作为字符串发送。你也可以看看这个类似问题的答案:PDO bindParam vs. execute

【讨论】:

    【解决方案2】:

    重要的是您使用参数而不是直接替换到查询字符串中。不管是用bindParam 绑定参数还是用数组参数绑定execute 都没有关系,它们是等价的。

    【讨论】:

      猜你喜欢
      • 2011-04-30
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2013-02-25
      • 2014-07-28
      • 2014-05-27
      相关资源
      最近更新 更多