dragonbe/hibp

一个集成Troy Hunt的HaveIBeenPawnd API的密码检查包。

v0.1.1 2019-09-30 21:04 UTC

README

PHP 7.2+ Packagist version Packagist daily downloads CircleCI status Infection MSI

Have I been pwned Composer包

为了提高您系统上用户的安全性,我开始为Troy Hunt的@TroyHuntHave I Been Pwned? API v2构建一个客户端,该客户端将检查给定的密码是否已在数据泄露中使用过。非常感谢Troy Hunt先生为我们提供这项服务。

项目范围

本项目目标是创建一个Composer包,让您能够快速验证给定的密码(来自注册或密码重置表单)是否在数据泄露中找到,以便您通知用户更改密码,从而提高整体安全性。

该项目也是我演讲Mutation Testing with Infection的主题,其中不仅覆盖了单元测试,还使用了Infection进行变异测试,以确保没有编码错误会滑入代码库。

入门指南

首先,您需要将此库添加到您的项目中。最简单的方法是使用Composer

composer require dragonbe/hibp

如果您想快速测试功能,请将以下代码复制/粘贴到名为hibp.php的文件中。

<?php

require_once __DIR__ . '/vendor/autoload.php';

$hibp = \Dragonbe\Hibp\HibpFactory::create();
echo 'Password "password": ' . ($hibp->isPwnedPassword('password') ? 'Pwned' : 'OK') . PHP_EOL;
echo 'Password "NVt3MpvQ": ' . ($hibp->isPwnedPassword('NVt3MpvQ') ? 'Pwned' : 'OK') . PHP_EOL;

现在运行此文件,以确保一切正常。

php hibp.php

如果一切顺利,您应该看到以下结果

Password "password": Pwned
Password "NVt3MpvQ": OK

获取HIBP中找到的命中数

有时您想显示给定密码找到的命中数。只需在您的$hibp实例上调用count()或直接调用$hibp->count()

<?php

require_once __DIR__ . '/vendor/autoload.php';

$hibp = \Dragonbe\Hibp\HibpFactory::create();
$passwords = ['password', 'NVt3MpvQ'];
foreach ($passwords as $password) {
    $found = $hibp->isPwnedPassword($password);
    $count = count($hibp);

    echo sprintf(
        'Password "%s": %s',
        $password,
        $found ? ('Pwned (' . $count . ' times)') : 'OK'
    ) . PHP_EOL;
}

这将给您一个更详细的关于密码在Have I Been Pwned?收集的数据泄露中使用的次数的视图。

Password "password": Pwned (3311463 times)
Password "NVt3MpvQ": OK

有关更多详细信息,请查看单元测试目录tests/,了解可能发生的异常以及可以使用此库的其他选项。

路线图

尽管这是项目的开始,但我想充分利用HIBP API,通过搜索用户名和电子邮件地址来查看它们是否在数据泄露中找到。这可能会提醒用户他们可能需要使用更安全的密码或更改提供的凭据的所有密码。

简而言之,以下是我希望在近期内完成的目标

  • 检查凭据(用户名/电子邮件地址)在HIBP Sites中的存在性
  • 检查凭据(用户名/电子邮件地址)在HIBP Pastes中的存在性

谁知道呢,也许当人们更多地使用这个库时,会有更多的想法提供

致谢

如果没有Troy Hunt先生投入宝贵的时间将泄露数据填入他的数据库并提供他的网站haveibeenpwned.com,那么这个库就不可能存在。所以,感谢您在HIBP上付出的巨大努力。

许可证

我已将此项目“原样”提供,并以MIT许可证授权,您可以在您的项目中自由使用。

问题、建议、反馈

请使用此项目的“问题”功能与我联系,提出您的建议。我喜欢您的反馈,并且也对您使用此库的场景感兴趣。