square1/pwned-check

验证密码变更是否与已知的受损密码相匹配

1.2 2022-11-15 12:56 UTC

This package is auto-updated.

Last update: 2024-09-15 17:05:09 UTC


README

PHP工具类,用于检查给定的密码是否为已知的受损密码,使用由Troy Hunt提供的Pwned Passwords服务。

安装

通过Composer

$ composer require square1/pwned-check

用法

    use Square1\Pwned\Pwned;
    use Square1\Pwned\Exception\ConnectionFailedException;

    $password = 'password1';

    $pwned = new Pwned();
    // Has password ever been compromised?
    $compromised = $pwned->hasBeenPwned($password);
    // (bool) true

    // Has password appeared in more than 5 compromised datasets?
    $compromised = $pwned->hasBeenPwned($password, 5);

    // Don't allow remote server to hang for over 2 seconds
    try {
        $pwned = new Pwned(['remote_processing_timeout' => 2]);
        $compromised = $pwned->hasBeenPwned($password);
    } catch (ConnectionFailedException $e) {
       // Connection has timed out..
    }

选项

类行为可以通过多种构造函数选项进行修改。

常见问题解答

如何确定一个密码是“已知的受损密码”?

Pwned Passwords服务由Troy Hunt提供,是一个优秀的资源,它汇总了在已知数据泄露中发现的所有密码。该API允许我们检查密码是否出现在以前的数据泄露中,以及它出现的频率。频率使我们能够决定在判断密码是否受损时有多严格。例如,abcd1234可能在数据泄露中出现334,000次,而totallyuniqueandrandompass1234可能只出现一次。根据您的用例,您可能只希望将广泛受损的密码列入黑名单。频率计数使我们能够做到这一点。

将密码发送到服务不是安全问题吗?

Pwned密码API允许进行范围查询。这涉及到在您的应用程序中使用此库对密码进行哈希处理,并将部分内容发送到API。API返回一组密码哈希(以及每个密码哈希的频率计数)。然后可以将这些与完整的密码哈希进行匹配,而完整的密码哈希永远不会离开应用程序。Cloudflare与Troy紧密合作设计了此API,并在此博客文章中详细介绍了此方法。

如果API服务器响应缓慢,我的应用程序会遇到问题吗?

典型的API响应非常快 - 请阅读这里的文章。然而,可能会出现连接问题或其他性能问题。为了在这些情况下保护您的应用程序,您可以将connection_timeoutremote_processing_timeout值设置为。这些是在终止cURL连接之前等待的秒数以及连接后的等待时间。如果由于达到这些超时之一而终止服务调用,将抛出Square1\Pwned\Exception\ConnectionFailedException

API结果是否被缓存?

此代码旨在与框架无关,因此缓存留给您的应用程序层。

测试

$ composer test

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件