使用 md5 加密的 PHP 和 Mysql 查询出现问题

2024-05-16

我使用普通的 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 个不同的值。

有人能帮我解决这个问题吗?


这里的许多典型警告都适用……提及它们也没什么坏处。

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

PHP 密码的安全哈希和盐 https://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords

为什么不在 PHP 中使用 AES 进行密码加密? https://stackoverflow.com/questions/3144283/why-not-use-aes-for-password-encryption-in-php

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

如何防止 PHP 中的 SQL 注入? https://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 md5 加密的 PHP 和 Mysql 查询出现问题 的相关文章

随机推荐