onepress / wp-password-bcrypt
WordPress 插件,用 PHP 5.5 的 password_hash 和 password_verify 函数替换 wp_hash_password 和 wp_check_password 的 phpass 哈希器。
Requires
- php: >=5.6.0
Requires (Dev)
- brain/monkey: ^2.6
- dealerdirect/phpcodesniffer-composer-installer: ^0.7.0
- mockery/mockery: ^1.4
- phpcompatibility/php-compatibility: ^9.3
- phpunit/phpunit: <= 9.3
- squizlabs/php_codesniffer: ^3.5
README
WordPress 的 bcrypt 密码哈希库
用 ❤️ 构建
支持
wp-password-bcrypt 是一个开源项目,完全免费使用。
概述
wp-password-bcrypt 是一个 WordPress 插件,用现代且安全的 bcrypt 替换 WP 过时且不安全的基于 MD5 的密码哈希。
此插件需要 PHP >= 5.5.0,它引入了内置的 password_hash
和 password_verify
函数。
要求
- PHP >= 5.5.0
- WordPress >= 4.4 (见 https://core.trac.wordpress.org/ticket/33904)
安装
此插件是一个 Composer 库,因此可以通过几种方式安装
Composer 自动加载
composer require onepress/wp-password-bcrypt
wp-password-bcrypt.php
文件将由 Composer 自动加载,并且 不会 出现在您的插件中。
作为必用插件手动复制
如果您不使用 Composer,您可以手动将 wp-password-bcrypt.php
复制到您的 mu-plugins
文件夹。
我们不推荐将其作为正常(非-mu)插件使用。这会使禁用或删除插件变得过于容易。
问题
WordPress 仍然使用基于 MD5 的密码哈希方案。他们实际上使 25% 的网站变得更加不安全,因为他们拒绝提高他们的最低 PHP 要求。通过继续允许 EOL PHP 版本回溯到 5.2,他们无法使用如 password_hash
的新功能。
这是一个 已知的 问题,WordPress 已经忽视了这个问题超过 4 年。WordPress 不仅设置了不安全的 MD5 默认值,而且没有做以下任何一件事:
- 记录这个问题
- 提供如何修复它并使其更安全的说明
- 通知用户关于更新的 PHP 版本,他们 可能 更加安全
MD5 有什么问题?非常简单:它在生成密码学安全的哈希时过于便宜且速度快。
解决方案
WordPress 至少做了一件事:他们使 wp_check_password
和 wp_hash_password
成为 可插拔 函数。这意味着我们可以在插件中定义这些函数并“覆盖”默认的函数。
此插件插入了 3 个函数
wp_check_password
wp_hash_password
wp_set_password
wp_hash_password
此函数是最简单的。此插件简单地调用 password_hash
而不是 WP 的默认密码哈希器。可以通过 wp_hash_password_options
过滤器设置 选项,这些选项 password_hash
可以接受。
wp_check_password
在核心上,此函数只是调用 password_verify
而不是默认的。然而,它还检查用户的密码是否以前使用旧的基于 MD5 的哈希器进行过哈希,并使用 bcrypt 重新哈希。这意味着您仍然可以在现有网站上安装此插件,一切都将无缝工作。
check_password
过滤器就像默认的 WP 函数一样可用。
wp_set_password
这个函数在这里直接包含,但是增加了返回哈希的功能。默认的 WP 函数不返回任何内容,这意味着你无端地需要将密码哈希两次。