geminilabs/wp-password-bcrypt

此包已被废弃,不再维护。作者建议使用 https://wordpresstheme.cn/plugins/password-bcrypt/ 包。

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

安装: 55

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 48

类型:wordpress-plugin

1.0.1 2018-02-15 19:31 UTC

This package is auto-updated.

Last update: 2019-11-02 14:18:46 UTC


README

Packagist Packagist Downloads Build Status

重要:wp-password-bcrypt 的官方版本与此版本唯一不同的是,此版本允许您使用 composer 安装为“必须使用”插件。(见下面的文档 以下

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 的“必须使用”插件

以下是一个使用 composer-installers 将此插件作为 mu-plugin 安装的 composer.json 示例

{
  "require": {
    "php": ">=5.6",
    "composer/installers": "^1.5.0",
    "geminilabs/wp-password-bcrypt": "^1.0.0"
  },
  "extra": {
    "installer-paths": {
      "public/wp-content/mu-plugins/{$name}/": [
        "type:wordpress-muplugin",
        "geminilabs/wp-password-bcrypt"
      ]
    },
    "wordpress-install-dir": "public"
  }
}

手动作为“必须使用”插件

如果您不使用 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函数不返回任何内容,这意味着您会无端地对其哈希两次。

常见问题解答

安装插件后,现有密码会发生什么?

一开始没有任何事情。现有密码只有在用户登录时才会用bcrypt重新进行哈希处理。如果用户从未登录,则其密码将永远使用MD5哈希存储在您的数据库中。

为什么此插件不重新哈希数据库中的所有现有密码?

目前这超出了插件的范围。我们希望保持简单直接。这可能是留给个别开发者或未来可能的一个单独插件的最佳做法。有关更多详细信息,请参阅https://github.com/roots/wp-password-bcrypt/issues/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,因此它不会显示在插件列表中。

为什么不用作必须使用的插件而不是插件?

如上所述,您一旦启用此插件,就不希望禁用它。将其安装在 plugins 中(作为“正常”插件)而不是在 mu-plugins 中(作为必用插件),会使管理员用户意外禁用它成为可能。

这与已存在的其他插件有何不同?

有一些插件已经存在,可以启用bcrypt。此插件不同之处在于我们绕过了WordPress核心使用的PasswordHash类和phpass库。此插件直接使用PHP的内置password_hashpassword_verify函数,仅支持PHP 5.5及以上版本。

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

比bcrypt更安全的散列函数与双因素认证、暴力破解尝试保护或任何在登录阶段起作用的机制具有不同的目的。如果攻击者能够访问您的数据库,强大的散列函数非常重要。这将使得从散列值中确定明文密码变得更加困难/实际上不可能。而MD5则是 trivial。用于保护登录的工具/插件仍然很重要,应与此插件一起使用。

进一步阅读

贡献者

此插件基于@Einkoro的一个Gist

它已被Roots团队修改并打包。Jan Pingel (@Einkoro) 已授权我们将其原始BSD许可代码重新发布为MIT许可。

贡献

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

社区

跟踪开发和社区新闻。