php crypt密码和postgresql数据库

时间:2014-02-18 15:11:39

标签: php postgresql-9.1 password-protection

我是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)";

一切正常,但我不确定,这是保护我的密码的正确方法。

有什么建议吗?

1 个答案:

答案 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));
    
相关问题