我被要求启用 SHA256 来存储 wordpress 密码。 我一直在寻找没有运气的插件(不工作),所以我开始开发自己的插件。
我首先想到.. 好吧,如果我用我自己的函数替换 wp_hash_password,它会在保存密码和登录时加密。但我没那么幸运。我可以在基本的 php 文件中运行 hash(sha256)。我知道用户将无法登录,因为存储的 key 是 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(例如在创建用户时)。
就我个人而言,我会质疑这一要求。
关于php - WordPress sha 256登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23949502/