roots/wp-password-bcrypt

WordPress 插件,用于将 wp_hash_password 和 wp_check_password 的 phpass 哈希器替换为 PHP 5.5 的 password_hash 和 password_verify,使用 bcrypt 进行密码哈希。

资助包维护!
roots

1.2.0 2024-09-10 23:11 UTC

This package is auto-updated.

Last update: 2024-09-11 03:37:50 UTC


README

wp-password-bcrypt

MIT License Packagist Packagist Downloads Build Status Follow Roots

WordPress 的内置 bcrypt 密码哈希
用 ❤️ 构建

支持

wp-password-bcrypt 是一个开源项目,完全免费使用。

然而,在 Roots 生态系统内维护和开发新功能和产品的努力,没有适当的资金支持是无法持续进行的。如果您有能力,请考虑通过以下链接进行捐赠。

Sponsor on GitHub Donate via Patreon Donate via PayPal

概述

wp-password-bcrypt 是一个 WordPress 插件,用于用现代且安全的 bcrypt 替换 WP 过时且不安全的基于 MD5 的密码哈希。

此插件需要 PHP >= 5.5.0,该版本引入了内置的 password_hashpassword_verify 函数。

有关此插件和密码哈希问题的更多背景信息,请参阅 改进 WordPress 密码安全

要求

安装

此插件是一个 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_passwordwp_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_hashpassword_verify函数,仅支持PHP 5.5+。

我已经使用了双因素认证和/或防止暴力登录尝试。此插件是否仍然有帮助?

比bcrypt更好的哈希函数在作用上不同于两步验证、暴力破解尝试保护或任何在登录阶段起作用的措施。如果攻击者能够获取到您的数据库,强大的哈希函数就非常重要。它们会使得从哈希值中确定明文密码变得更加困难/实际上不可能。而MD5则相对简单。用于保护登录的工具/插件仍然很重要,应与该插件一起使用。

进一步阅读

贡献者

本插件基于Gist,由@Einkoro创建。

该插件已被Roots团队修改和打包。Jan Pingel (@Einkoro) 已授权我们将其原始的BSD许可代码重新分发给MIT许可。

贡献

我们欢迎所有人的贡献。我们提供了贡献指南,以帮助您开始。

社区

跟踪开发和社区新闻。