虽然,我们为了安全考虑,在注册用户时会检查密码规则,避免弱密码,比如百度的注册页面:

但是,现在的黑客也不会傻到用穷举的办法生成密码去攻击网站,更常用的方式是使用已泄露密码生成的字典。
那这些字典从哪来的?
HIBP(have i been pwned)
我知道的,可以得到这些数据的最大网站是HIBP(https://haveibeenpwned.com/),上面提供了大量已泄露网站的信息,连FBI都向它提供数据:

从网站提供的被泄露网站列表上看,已经有多家国内公司数据上榜,某知名网站也在列:

网站上还可直接检查你的密码是否已经泄露,我们测试一个符合百度密码规则的看看:

可以看到有多少人和你设一样的密码的了!囧

PwnedPasswords.Client NuGet包
网站也提供了API(https://haveibeenpwned.com/API/v3)用于执行检查操作。
而.Neter可以直接使用NuGet包PwnedPasswords.Client来调用API。
引用PwnedPasswords.Client NuGet包后,在Startup.cs文件的ConfigureServices方法中加入下列代码:
services.AddPwnedPasswordHttpClient(minimumFrequencyToConsiderPwned: 1000);
minimumFrequencyToConsiderPwned表示泄露次数超过此设置的才算弱密码。
使用HasPasswordBeenPwned检查密码是否已经泄露:
private readonly ILogger<WeatherForecastController> _logger;
private readonly IPwnedPasswordsClient pwnedPasswords;public WeatherForecastController(ILogger<WeatherForecastController> logger,
IPwnedPasswordsClient pwnedPasswords)
{_logger = logger;this.pwnedPasswords = pwnedPasswords;
}[HttpGet]
public async Task<string> GetAsync(string password)
{if (await pwnedPasswords.HasPasswordBeenPwned(password)){ return "弱密码";}return "强密码";
}

结论
由于泄露密码随时在增加,建议在登录时也加上弱密码检测。
一旦发现密码属于已泄露的,则跳转到修改密码页面,要求用户重新设置密码。
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!