itinerisltd / disallow-pwned-passwords
禁止WordPress和WooCommerce用户使用被破解的密码。
Requires
- php: ^7.0
- league/container: ^3.2
- typisttech/wp-contained-hook: dev-seven-zero
Requires (Dev)
- 10up/wp_mock: ^0.3.0 || ^0.4.0
- codeception/base: ^2.4
- itinerisltd/itineris-wp-coding-standards: ^0.2.1
- mockery/mockery: ^1.1
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-09-20 21:48:15 UTC
README
目标
剧透警报:用户密码永远不会从你的服务器离开,即使是经过散列的形式。
尽管重用密码是用户的错误,但邪恶的攻击者暴力破解用户的密码,窃取所有个人信息或通过你的网站非法赚取用户的辛苦钱。那些懒惰的用户会责怪你,网站所有者/开发者。
在处理建立和更改记忆中的请求时,验证器应当将拟使用的密码与包含已知常用、预期或被破坏的值的列表进行比较。例如,...
- 从之前的数据泄露事件中获取的密码
-- 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,还有额外的拦截
WC_Form_Handler::process_reset_password
在“主页”>“我的账户”>“忘记密码”WC_Form_Handler::save_account_details
在“主页”>“我的账户”>“账户详情”WC_Form_Handler::process_registration
在“主页”>“我的账户”WC_Checkout::validate_checkout
在“主页”>“结账”
性能
默认情况下,此插件使用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主题和插件
- 服务器上的所有内容
- 其他安全实践
- 你的心态
强烈推荐
- WP Password Argon Two - 使用PHP的本地函数,以Argon2i哈希和SHA-512 HMAC安全地存储WordPress用户密码
- WP Cloudflare Guard - 将WordPress与Cloudflare防火墙连接,在DNS级别保护你的WordPress网站。自动创建防火墙规则以阻止危险IP
- 双重因素认证
- wp-password-bcrypt
强密码会被破解吗?
是的。示例
如何禁用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日达到生命周期结束。
看起来很棒。我能在哪里找到更多类似的好东西?
- 关于Itineris博客的文章
- 在Itineris的GitHub个人资料上的更多项目
- 在Itineris和TangRufus wp.org个人资料上的更多插件
- 关注Twitter上的@itineris_ltd和@TangRufus
- 雇佣Itineris来构建你的下一个酷炫网站
除了wp.org,我还能在哪里给⭐⭐⭐⭐⭐五星好评?
谢谢!很高兴你喜欢它。让我的老板知道有人在使用这个项目很重要。请考虑
- 在wp.org上给予⭐⭐⭐⭐⭐评价
- 发一条提及@itineris_ltd和@TangRufus的好推文
- ️️:star: 关注这个Github仓库
- 关注这个Github仓库
- 写博客文章
- 提交pull requests
- 雇佣Itineris
替代方案
测试
$ 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 验证是来自 Cloudflare 的 Junade Ali 的出色工作。