我被要求启用SHA256来存储wordpress密码。我已经搜索了插件没有运气(不工作),所以我开始开发自己的。
我一开始以为…如果我用我自己的函数替换wp_hash_password,它将在保存密码和登录时加密。但我没那么幸运。我能够运行哈希(sha256),虽然在一个基本的php文件。我知道用户将无法登录,因为存储的密钥将是md5,比较将是SHA,但这不是问题。
代码: if(!function_exists('wp_hash_password')):
function wp_hash_password($password){
return hash('sha256', $password);
}
endif;
所以我想我必须做我自己的"检查登录"功能。有人做了这样的事吗?他们的
在我看来,如果您覆盖wp_check_password
函数,您的方法应该工作。这必须在一个插件中完成,我认为,因为函数是在主题的functions.php
之前加载的。像这样:
<?php
/*
Plugin Name: sh256pass
Version: 1.0
*/
if(!function_exists('wp_hash_password')):
function wp_hash_password($password){
return hash('sha256', $password);
}
endif;
if(!function_exists('wp_check_password')):
function wp_check_password($password, $hash, $user_id = '') {
// You might want to apply the check_password filter here
return wp_hash_password($password) == $hash;
}
endif;
请注意,你要么必须让你的用户在下次登录时重置他们的密码(你将无法自动转换现有的密码),或者你必须遵循WordPress在wp_check_password
中的方法,并将密码与旧的加密值(在他们的情况下md5
)进行比较,如果匹配,更新到新值。
请记住wp_users.user_pass
字段只有64个字符长。虽然这个长度(刚好)足以存储sha256
值,但它不足以存储sha256
值和。如果不加盐,并且两个用户选择相同的密码,则wp_users.user_pass
字段将包含相同的值,从而使任何访问数据库的人都可以明显地看到密码是相同的。我的直觉是,这比使用目前的算法有更大的安全风险。您可以通过(例如)在散列之前将用户ID和密码连接起来来解决这个问题,但是可能存在不知道用户ID的边缘情况(例如在创建用户时)。