square1 / pwned-check-laravel
验证密码更改是否与已知的受损害密码相匹配
Requires
- php: >=7.0
- square1/pwned-check: ^1.2
This package is auto-updated.
Last update: 2024-09-21 10:56:13 UTC
README
Laravel验证规则,用于确定密码是否出现在一组已知的受损害密码中。这是Pwned Check实用类PHP包装器,利用Pwned Passwords服务,由Troy Hunt提供。
安装
通过Composer
$ composer require square1/pwned-check-laravel
Laravel 5.5+
如果你使用Laravel 5.5+,则该软件包将自动发现。
Laravel <= 5.4
要使用Pwned Check验证规则,必须在启动你的Laravel应用程序时注册提供者。
找到你的config/app.php
中的providers
键并添加以下内容。
'providers' => array( // ... Square1\Laravel\PwnedCheck\Providers\PwnedCheckServiceProvider::class, )
发布配置文件
php artisan vendor:publish --provider="Square1\Laravel\PwnedCheck\Providers\PwnedCheckServiceProvider" --tag=config
这将发布配置文件到pwned-check.php
。
配置选项
提供了一些配置选项来修改类的行为。
用法
// RegisteredUserController.php public function store(Request $request) { $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:'.User::class], 'password' => ['required', 'confirmed', Rules\Password::defaults(), 'pwned'], ]); // ... // Reject any password that has appeared in the list of compromised ones more than ten times 'password' => ['required', 'confirmed', Rules\Password::defaults(), 'pwned:10'],
常见问题解答
如何设置显示的验证错误消息?
在应用运行的所有语言的lang/{LANG}/validation
中,可以在custom
数组中设置消息。
'custom' => [
'password' => [
'pwned' => 'The :attribute has appeared in a known set of compromised passwords. Please choose a different password.',
],
],
如何确定密码是“已知的受损害”的?
Pwned Passwords服务是由Troy Hunt提供的,它是一个很好的资源,汇集了在已知数据泄露中发现的所有密码。该API允许我们检查密码是否出现在以前的数据泄露中,以及它出现的频率。频率允许我们决定在决定密码是否被视为受损害时有多严格。例如,abcd1234
可能在数据泄露中出现了334,000次,而totallyuniqueandrandompass1234
可能只出现了一次。根据你的用例,可能只应该将广泛受损害的密码列入黑名单。频率计数使我们能够这样做。
将密码发送到服务不是安全风险吗?
Pwned密码API允许进行范围查询。这涉及在应用程序中通过此库哈希密码,并将部分内容发送到API。API返回一组密码哈希(以及每个哈希的频率计数)。然后可以将这些与完整的密码哈希进行匹配,完整的密码哈希从未需要离开应用程序。Cloudflare与Troy密切合作设计了此API,并在这篇博客文章中详细介绍了此方法。
如果API服务器响应缓慢,我的应用程序会遇到问题吗?
典型的API响应速度非常快 - 值得阅读的这篇文章在这里。然而,在某个时刻,可能会有连接问题或与服务的其他性能问题。为了在这些情况下保护你的应用程序,你可以设置connection_timeout
和remote_processing_timeout
配置值。这些是在杀死curl连接之前等待的秒数和连接后的等待时间。如果服务调用因达到这些超时之一而被终止,将抛出Square1\Pwned\Exception\ConnectionFailedException
。
如果API超时,这和密码被破解的行为是否相同?
这可以通过 fail_on_timeout
配置值来控制。当它设置为 true
时,任何连接失败都将被视为验证失败。然而,你可能希望将此破解检查视为不太重要的一项,因此在远程服务失败的情况下,你更希望用户注册不受影响。将此值设置为 false
将意味着连接失败不会触发验证失败。
API结果是否被缓存?
API结果默认缓存一天。此值可以在 cache_default_ttl
配置变量中修改。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。