【问题标题】:php hashed password check not workingphp哈希密码检查不起作用
【发布时间】:2015-02-14 13:22:54
【问题描述】:

我在使用散列密码时遇到了一个奇怪的问题。我在这个网站(运行 php 的 Windows)上的另一个服务器(运行 php 的 Linux)上使用了来自另一个网站的相同脚本。 登录不起作用,存储的散列密码与输入的密码不匹配,我已经回复检查但他们没有。 据我所知,代码(两者都相同)在 Linux 上工作,但在 Windows 上不工作,这可能吗?

这是代码(在两个网站上都是相同的,所以应该不是问题)

<?PHP



// get user data
$strUsername = isset($_POST['email']) ? trim(strip_tags($_POST['email'])) : null;
$strPassword = isset($_POST['password']) ? trim(strip_tags($_POST['password'])) : null;

$DBH = new PDO('database details...');

$SQL = "SELECT inj_user_email,inj_user_password,inj_user_password_salt,inj_user_id FROM inj_user WHERE inj_user_email = :username;";

if ( $strUsername == '' || $strPassword = '' )
{
	$missing = 'Please enter an email address and password';
}
else
{
	$STH = $DBH->prepare($SQL);
	$STH->bindParam(':username', $strUsername);
	$STH->execute();
	$row = $STH->fetch();
	if ($STH->rowCount() > 0) {
			$verify_password = hash('sha512' , $strPassword.$row['inj_user_password_salt']);
			echo $verify_password.'<br>'.$row['inj_user_password'];
			if (strcmp($verify_password , $row['inj_user_password']) == 0) 
			{
				session_start();
				session_regenerate_id(true);
				$_SESSION['user1'] = $row['inj_user_id'];
				header('Location: ../screen/');
			}
			else
			{
				$missing='Incorrect password';
				echo $missing;
	exit;
			}
	}
	else
	{
		$missing ='Email address not found';
	}
}
header('Location: ../?missing='.$missing);
?>

谢谢。

【问题讨论】:

  • 您是如何将值存储在数据库中的?您确定数据库中的哈希和盐是最新的吗?

标签: php hash passwords saltedhash


【解决方案1】:

您在比较中缺少= 符号:

if ( $strUsername == '' || $strPassword = '' )

应该是

if ( $strUsername == '' || $strPassword == '' )

此外,此方案使用盐:

$row['inj_user_password_salt']

它在散列之前附加到密码。它来自数据库,所以首先要确保正确检索到盐并与原始盐匹配。

然后检查您使用的字符编码是否也与原始字符匹配,特别是如果您使用的是非 ascii 字符。 PHP 上最流行的 2 种非 ascii 字符编码是 UTF-8(无 BOM)和 ISO-8859-1。

无论如何,您不应该使用 sha 进行散列(即使是 512 位版本)

有一些安全的密码散列算法,例如 bcrypt。

PHP >= 5.5 实现了安全密码散列/检查函数password_hash 和password_verify。这就是你应该使用的。

(阅读 PHP 手册中的FAQ on password hashing 了解更多信息)

还有密码哈希库,例如 phpass(被流行的 CMS 使用,例如 WordPress 和 Drupal)。

(如果您有兴趣,可以查看我自己的 tweak 以向该库添加对更安全的密码哈希算法的支持)

【讨论】:

  • elcodedocle - 你这个小开膛手!尴尬的“你错过了一个等号”修复了它,谢谢。
猜你喜欢
  • 2015-12-02
  • 2021-10-03
  • 1970-01-01
  • 2014-09-29
  • 2019-09-12
  • 1970-01-01
  • 2019-04-07
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多