我是PHP的新手。我正在进行身份验证,我正在使用存储在数据库PostgreSQL中的密码检查密码。在db站点上,我使用此函数来加密我的密码:
update ucty set psswd = crypt('some_pswd',gen_salt('md5')) where uid='1';
在我的PHP srcipt中,我正在使用此代码:
$query = "SELECT meno, priezvisko, nickname, psswd, uid
FROM ucty
where nickname='$nickname' and psswd=crypt('$password', psswd)";
一切正常,但我不确定,这是保护我的密码的正确方法。
有什么建议吗?
答案 0 :(得分:2)
你是对的;此不是保护密码的正确方法。
您正在加密密码作为查询的一部分。这可以记录(以纯文本格式),因此入侵者(或任何收听流量的人)很可能以明文形式查看用户密码。
“我怎么能阻止这种情况?”在PHP代码中,在服务器端进行哈希处理。您可以在PHP手册中阅读this。
基本上,您希望将查询设置为以下内容:
UPDATE ucty SET psswd=$hashed WHERE uid=1;
您将变量直接放入SQL语句中。您没有提到用于查询数据库的方法,但是您需要使用prepared statements。这是一种安全的方式来滑动用户提供的数据($nickname
和$password
)。
这将是使用预准备语句的好方法的一个例子:
$query = "SELECT meno, priezvisko, nickname, psswd, uid"
. " FROM ucty"
. " WHERE nickname=? and psswd=?";
$stmt = $dbh->prepare($query);
$stmt->execute(array($nickname, $hashedPassword));