【发布时间】:2016-03-31 23:40:54
【问题描述】:
我正在尝试使用 PHP PDO 中的以下代码更改用户的密码:
public function resetaSenha(string $senha, string $id){
$con = $this->conexao;
$sql = "UPDATE users SET senha = :senha WHERE id = sha1(:id)";
$obj = $con->prepare($sql);
$obj->bindParam(":senha", $senha);
$obj->bindParam(":id", $id);
$obj->execute();
}
我用 id 1 的 sha1 哈希和密码调用这个函数(我这样做只是为了测试):
require_once("funcoes_db.php");
$func = new FuncoesDb();
$func->resetaSenha("05fe7461c607c33229772d402505601016a7d0ea", "356a192b7913b04c54574d18c28d46e6395428ab");
但它不起作用。如果我将查询更改为:
$sql = "UPDATE users SET senha = :senha WHERE id =:id";
然后调用函数:
`$func->resetaSenha("05fe7461c607c33229772d402505601016a7d0ea", "1")`;
但我通过 URL 获取值,我需要对它们进行加密。为什么不这样工作?
【问题讨论】:
-
看起来没问题...一切都在你的 sql server 中工作了吗?
-
是的,它可以在 PHP 中没有 sha1() 的情况下工作。
-
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代的development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。至少遵循recommended security best practices 并确保您对密码使用正确的加密哈希。