【问题标题】:Trouble with PHP and Mysql queries using md5 encryption使用 md5 加密的 PHP 和 Mysql 查询出现问题
【发布时间】:2011-06-27 19:23:22
【问题描述】:

我使用的是普通的php/mysql插入查询,使用md5加密密码

这是插入查询:

$sql = mysql_query("INSERT INTO user (username, password, role, approved) values ('".$username."', '".md5($password)."', 'user', '0')");

这是我用于登录检查的 SELECT 查询:

$sql = "SELECT id, username, password, role, approved FROM user WHERE username = '".$username."' AND password = '".md5($password)."'";

$result = mysql_query($sql);

但是当我检查插入的密码和登录密码时,即使我给出相同的值,它也会返回 2 个不同的值。

谁能帮我解决这个问题?

【问题讨论】:

  • -1 表示完全不相关的主题。
  • 请尝试提高您的接受度。您有几个具有可行答案的未解决问题,而 0% 确实让潜在的帮助者望而却步。您可以通过点击最佳答案旁边的复选标记来接受历史记录中问题的答案。
  • 我想知道当有人在您网站的用户名字段中输入' OR TRUE -- 时会发生什么。

标签: php mysql md5


【解决方案1】:

假设$username$password 实际上是相同的...您是否检查过以确保users 表上的password 列字符长度足够大以容纳整个MD5 哈希?

有计算和存储 MD5 哈希的示例吗?

【讨论】:

    【解决方案2】:

    这里有许多典型的警告适用......提及它们不会有什么坏处。

    首先,用于密码散列的 vanilla md5 肯定不是在数据库中保护用户密码的最佳方式。关于 stackoverflow 的许多问题记录了更好的方法,尽管存在意见分歧,但它们都比常规的 md5 无盐哈希更安全。

    Secure hash and salt for PHP passwords

    Why not use AES for password encryption in PHP?

    此外,您没有对 sql 输入进行任何清理,从而使您的数据库容易受到 sql 注入攻击。一个爱管闲事的用户可能会操纵您的用户插入来删除表或修改您的数据结构。您需要使用 mysql_real_escape_string() 转义这些值,或者采用完全不同的数据库访问系统,例如具有参数化 sql 的 PDO。

    How can I prevent SQL injection in PHP?

    话虽如此,您的查询应该检查是否存在具有正确用户名和密码的用户行,通常通过首先执行 COUNT 查询并确保用户存在于数据库中并具有有效的登录凭据来实现。

    您应该确保您的数据库列具有适当的长度和数据类型,以存储密码的哈希值。截断任何一个都可能破坏数据。

    我希望这会有所帮助 - SQL 注入可能特别讨厌!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多