itinerisltd/disallow-pwned-passwords

禁止WordPress和WooCommerce用户使用被破解的密码。

0.3.2 2019-02-19 17:35 UTC

This package is auto-updated.

Last update: 2024-09-20 21:48:15 UTC


README

CircleCI Scrutinizer Code Quality GitHub License Hire Itineris

Packagist: Packagist Version PHP from Packagist Packagist Downloads

WordPress: Packagist Downloads

目标

剧透警报:用户密码永远不会从你的服务器离开,即使是经过散列的形式

尽管重用密码是用户的错误,但邪恶的攻击者暴力破解用户的密码,窃取所有个人信息或通过你的网站非法赚取用户的辛苦钱。那些懒惰的用户会责怪你,网站所有者/开发者。

在处理建立和更改记忆中的请求时,验证器应当将拟使用的密码与包含已知常用、预期或被破坏的值的列表进行比较。例如,...

  • 从之前的数据泄露事件中获取的密码

-- NIST数字身份指南

此插件的唯一目的是 禁止WordPress和WooCommerce用户重复使用Have I Been Pwned数据库中的密码

像五岁孩子一样解释它

  • Troy Hunt,一位知名的安全专家,收集了来自之前安全漏洞的6,493,641,194(仍在增加)个被破坏的密码
  • 在haveibeenpwned.com上以SHA-1散列形式存储的被破坏密码
  • 当WordPress / WooCommerce用户尝试更改密码时,此插件会对用户密码进行散列
  • 取散列的前5个字符
  • 向haveibeenpwned.com请求所有具有相同前5个散列字符的被破坏密码
  • 检查用户密码在“我已经被破坏”数据库中出现的次数
  • 如果密码已被破坏,则禁止更改密码

年龄大于五岁的用户可以从...

最低要求

  • PHP v7.0
  • WordPress v4.9.8
  • (可选) WooCommerce v3.4.4

安装

Composer(推荐)

$ composer require itinerisltd/disallow-pwned-passwords

WP CLI

$ wp plugin install disallow-pwned-passwords --activate

经典

https://wordpresstheme.cn/plugins/disallow-pwned-passwords/下载插件zip文件,然后按照https://codex.wordpress.org/Managing_Plugins#Installing_Plugins进行操作

用法

激活后即可忘记。

此插件在以下情况下进行拦截:

  • /wp-admin/user-new.php上创建新用户时
  • /wp-admin/user-edit.php上更改其他用户的密码时
  • /wp-admin/profile.php上更改您的密码时
  • /wp-login.php?action=rp上执行新用户注册时

如果已安装WooCommerce,还有额外的拦截

性能

默认情况下,此插件使用WP对象缓存将Have I Been Pwned API响应缓存1周。

如果您没有持久缓存插件,则不会有任何效果,也不会缓存任何内容。

在极少数情况下,持久缓存插件可能不兼容,您可以通过以下方式禁用:

<?php

use Itineris\DisallowPwnedPasswords\HaveIBeenPwned\ClientInterface;
use Itineris\DisallowPwnedPasswords\HaveIBeenPwned\Client;
use League\Container\Container;


add_action('i_dpp_register', function (Container $container): void {
    $container->add(ClientInterface::class, Client::class);
});

常见问题解答

你把所有密码都发送给其他人了吗?

否。 用户密码永远不会离开您的服务器,甚至不以散列形式存在

你如何比较用户密码与6,493,641,194个被破解的密码?

好奇的用户可以了解更多信息...

多疑的用户应该检查插件实现

如果你不相信haveibeenpwned.com,你会怎么做?

Troy Hunt是一位知名的安全专家。您应该比我(插件作者)更信任他。无论如何,您可以替换默认的API客户端为您的客户端

<?php

use Itineris\DisallowPwnedPasswords\HaveIBeenPwned\ClientInterface;
use League\Container\Container;

class YourCustomClient implements ClientInterface
{
    // Your implementation.
}

add_action('i_dpp_register', function (Container $container): void {
    $container->add(ClientInterface::class, YourCustomClient::class);
});

此插件使用 league/container。更多内容请参阅其文档

如果你不相信插件作者,你会怎么做?

好问题!你不应该盲目相信来自互联网上令人毛骨悚然的任何安全指南/插件——包括这个!

查看 插件实现

我安装了这个插件。这难道意味着我的WordPress站点是不易被黑客攻击的吗?

没有任何网站是无法被黑客入侵的。

要拥有一个安全的WordPress网站,你必须保持以下内容更新

  • WordPress核心
  • PHP
  • 此插件
  • 所有其他WordPress主题和插件
  • 服务器上的所有内容
  • 其他安全实践
  • 你的心态

强烈推荐

强密码会被破解吗?

是的。示例

如何禁用WooCommerce密码强度计?

仅用于测试,风险自负!

add_action('wp_print_scripts', function () {
    wp_dequeue_script('wc-password-strength-meter');
}, 10000);

你会为旧版本的PHP添加支持吗?

永远不要!此插件只能在活跃支持的PHP版本上运行。

不要在已停用或仅提供安全更新的PHP版本上使用它。

注意:当前版本支持PHP 7.0,因为wordpress.org svn pre-commit hook拒绝PHP 7.1+语法。然而,你不应该使用PHP 7.0,因为它已于2019年1月10日达到生命周期结束

看起来很棒。我能在哪里找到更多类似的好东西?

除了wp.org,我还能在哪里给⭐⭐⭐⭐⭐五星好评?

谢谢!很高兴你喜欢它。让我的老板知道有人在使用这个项目很重要。请考虑

替代方案

测试

$ composer test
$ composer phpstan:analyse
$ composer style:check

不接受没有测试的pull requests!

反馈

请提供反馈!我们希望尽可能多地将此库用于项目。请提交一个issue,指出你喜欢和不喜欢的内容,或者fork项目并提出建议。没有问题太小。

变更日志

请参阅CHANGELOG了解最近更改的更多信息。

安全性

如果您发现任何安全相关的问题,请发送电子邮件至 hello@itineris.co.uk 而不是使用问题跟踪器。

致谢

禁止泄露密码 是由 Itineris Limited 创建的一个项目,由 Tang Rufus 实现。

完整的贡献者列表可以在 这里 找到。

特别感谢 Troy Hunt,他的 已泄露数据库 使得此插件成为可能。此外,k-Anonymity 验证是来自 CloudflareJunade Ali 的出色工作。

许可协议

禁止泄露密码 采用 GPLv2(或更高版本)许可,由 自由软件基金会 提供。请参阅 许可文件 获取更多信息。