onepress/wp-password-bcrypt

WordPress 插件,用 PHP 5.5 的 password_hash 和 password_verify 函数替换 wp_hash_password 和 wp_check_password 的 phpass 哈希器。

v1.0.0 2024-05-03 07:02 UTC

This package is auto-updated.

Last update: 2024-09-03 07:53:35 UTC


README

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

支持

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

概述

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

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

要求

安装

此插件是一个 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_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 重新哈希。这意味着您仍然可以在现有网站上安装此插件,一切都将无缝工作。

check_password 过滤器就像默认的 WP 函数一样可用。

wp_set_password

这个函数在这里直接包含,但是增加了返回哈希的功能。默认的 WP 函数不返回任何内容,这意味着你无端地需要将密码哈希两次。