roots / wp-password-bcrypt
WordPress 插件,用于将 wp_hash_password 和 wp_check_password 的 phpass 哈希器替换为 PHP 5.5 的 password_hash 和 password_verify,使用 bcrypt 进行密码哈希。
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
This package is auto-updated.
Last update: 2024-09-11 03:37:50 UTC
README
WordPress 的内置 bcrypt 密码哈希
用 ❤️ 构建
支持
wp-password-bcrypt 是一个开源项目,完全免费使用。
然而,在 Roots 生态系统内维护和开发新功能和产品的努力,没有适当的资金支持是无法持续进行的。如果您有能力,请考虑通过以下链接进行捐赠。
概述
wp-password-bcrypt 是一个 WordPress 插件,用于用现代且安全的 bcrypt 替换 WP 过时且不安全的基于 MD5 的密码哈希。
此插件需要 PHP >= 5.5.0,该版本引入了内置的 password_hash
和 password_verify
函数。
有关此插件和密码哈希问题的更多背景信息,请参阅 改进 WordPress 密码安全。
要求
- PHP >= 5.5.0
- WordPress >= 4.4 (see https://core.trac.wordpress.org/ticket/33904)
安装
此插件是一个 Composer 库,因此可以通过几种方式安装
Composer 自动加载
composer require roots/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。这意味着您仍然可以在现有网站上安装此插件,并且一切都将无缝工作。
与默认WP函数一样,可用check_password
过滤器。
wp_set_password
此函数以原始形式包含在此处,但增加了返回哈希值。默认WP函数不返回任何内容,这意味着您将无理由地将它哈希两次。
与默认WP函数一样,wp_set_password
动作可用。
常见问题解答
安装此插件时,现有密码会发生什么变化?
一开始没有任何变化。只有当用户登录时,现有密码才会用bcrypt重新哈希。如果用户从未登录,他们的密码将永远使用MD5在您的数据库中进行哈希。
为什么此插件不重新哈希数据库中的所有现有密码?
目前这超出了插件的范围。我们希望保持简单直接。这也许最好留给个别开发者或未来可能的一个单独的插件。有关更多信息,请参阅#6。
如果我删除/停用此插件会发生什么?
神奇的是,一切仍然正常工作。有关更多信息,请参阅此评论。
任何现有的bcrypt哈希密码都将保持原样。任何新用户或重置密码的用户将获得一个新的MD5哈希密码。
为什么您不使用password_compat库,以便此插件可以支持PHP 5.3.7以下的版本?
如果确实需要,password_compact库非常好。但Roots团队倡导使用受支持的PHP版本,目前(截至2016年3月)为5.5及以上。安全性的一部分是使用仍然获得安全补丁的PHP版本,所以我们不会积极支持旧的不受支持的PHP版本。
为什么此插件没有在管理界面中显示?
如果您正在使用Composer,则wp-password-bcrypt.php
文件将自动自动加载。由于包类型未设置为wordpress-muplugin
,因此它不被视为真正的WordPress插件,所以它不会显示在插件列表中。
使用此作为插件而不是强制使用插件有什么问题?
如上所述,您不想禁用已启用的此插件。将此插件安装到plugins
(作为“正常”插件)而不是安装到mu-plugins
(作为强制使用插件),使得管理员用户可能意外禁用它。
这与其他已经存在的插件有什么不同?
有一些插件可以实现bcrypt。此插件的不同之处在于我们绕过了WordPress核心使用的PasswordHash
类和phpass
库。此插件直接使用PHP内置的password_hash
和password_verify
函数,仅支持PHP 5.5+。
我已经使用了双因素认证和/或防止暴力登录尝试。此插件是否仍然有帮助?
比bcrypt更好的哈希函数在作用上不同于两步验证、暴力破解尝试保护或任何在登录阶段起作用的措施。如果攻击者能够获取到您的数据库,强大的哈希函数就非常重要。它们会使得从哈希值中确定明文密码变得更加困难/实际上不可能。而MD5则相对简单。用于保护登录的工具/插件仍然很重要,应与该插件一起使用。
进一步阅读
password_hash
RFC- PHP中的安全密码存储
- 如何安全地存储密码
贡献者
该插件已被Roots团队修改和打包。Jan Pingel (@Einkoro) 已授权我们将其原始的BSD许可代码重新分发给MIT许可。
贡献
我们欢迎所有人的贡献。我们提供了贡献指南,以帮助您开始。
社区
跟踪开发和社区新闻。
- 在Roots Discourse上参与讨论
- 关注@rootswp的Twitter
- 阅读并订阅Roots博客
- 订阅Roots通讯
- 收听Roots播客