Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用md5加密的PHP和Mysql查询存在问题_Php_Mysql_Md5 - Fatal编程技术网

使用md5加密的PHP和Mysql查询存在问题

使用md5加密的PHP和Mysql查询存在问题,php,mysql,md5,Php,Mysql,Md5,我使用的是普通的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, appro

我使用的是普通的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);
但是当我检查插入的密码和登录密码时,它返回两个不同的值,即使我给出相同的值


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

假设
$username
$password
实际上是相同的。。。您是否检查了表
users
上的
password
列字符长度是否足以容纳整个MD5哈希


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

这里的许多典型警告适用于。。。提到他们没什么坏处

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

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

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

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


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

-1表示完全无关的主题。请尝试提高您的接受度。你有几个开放性的问题和可行的答案,而这0%真的让潜在的帮助者望而却步。您可以通过单击最佳答案旁边的复选标记来接受历史记录中问题的答案。我想知道当有人在您网站的用户名字段中键入
”或TRUE--
时会发生什么情况。