虽然,我们为了安全考虑,在注册用户时会检查密码规则,避免弱密码,比如百度的注册页面:
但是,现在的黑客也不会傻到用穷举的办法生成密码去攻击网站,更常用的方式是使用已泄露密码生成的字典。
那这些字典从哪来的?
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“,记住我!