【问题标题】:Digest authentication with encrypted stored password in mysql在 mysql 中使用加密存储密码进行摘要身份验证
【发布时间】:2023-03-21 12:35:01
【问题描述】:
我想在我的网站上实施摘要认证。但是,我有一个带有加密用户表的用户表。我知道如果我使用基本身份验证,我可以加密 $_SERVER['PHP_AUTH_PW'] 。我们如何使用相同的方法进行摘要身份验证?
【问题讨论】:
标签:
php
mysql
encryption
basic-authentication
digest-authentication
【解决方案1】:
你在寻找这样的东西吗?
define('MY_REALM', 'THIS IS A SECURE FACILITY, AND I MEAN THAT UNIRONICALLY');
$valid = false;
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) {
// Use your DB here; prepared statements are your friend:
$userData = $user->getByUsername($_SERVER['PHP_AUTH_USER']);
if (!empty($userData)) {
$valid = password_verify($_SERVER['PHP_AUTH_PW'], $userData['password_hash']);
}
}
if (!$valid) {
header('WWW-Authenticate: Basic realm="'.MY_REALM.'"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
}
HTTP 摘要身份验证方法几乎没有什么好处。只需在您的网站上使用 HTTPS 并使用 password_hash() 存储密码,然后使用 password_verify() 进行检查。