我有一个PHP7登录系统,我正在努力提高密码的安全性。我已经下载了大量的(15 15!)https://crackstation.net/buy-crackstation-wordlist-password-cracking-dictionary.htm上的单词列表。我想对其进行设置,以便当用户尝试设置新密码时,将其与单词列表进行比较,如果在列表中找到,则拒绝该密码。
我不知道如何在PHP中打开这么大的文件并遍历它而不会遇到内存/资源问题。有人能帮我找到一种有效的方法来检查这么长的列表中的字符串吗?
(如果有帮助,我也有一个MySQL数据库,不过我相信我更喜欢将列表作为文本文件保留。)
更新:我想这会涉及一些类似于排序例程的逻辑,以避免逐行遍历整个列表?也就是说,如果密码以"z“开头,我应该直接跳到”z“...
发布于 2018-06-08 04:34:04
Crackstation提供了一个PHP库,用于创建索引和查找值。请参阅此处的说明:https://github.com/defuse/crackstation-hashdb。
查找是通过LookupTable
类完成的:https://github.com/defuse/crackstation-hashdb/blob/master/LookupTable.php
您还可以使用PHP对CrackLib数据文件的支持:
$dict = crack_opendict('/path/to/my_dictionary') or die('Failed to open file');
$check = crack_check($dict, $somePassword);
echo crack_getlastmessage(); // e.g.: 'weak password'
crack_closedict($dict);
如果您的数据不是这些格式中的一种,则需要为您的数据集创建一个索引,以提供高效的查找。有几个命令行工具可以为您做这件事,比如SWISH++。
发布于 2018-06-08 04:54:00
我认为最好是想出一个限制和评估模式,它将产生一个强密码,并找到一种方法来防止在您的系统中使用这样的列表,比如限制相同ip的登录尝试,如果总尝试次数超过规范,则会发出警报,因为列表可能每天都会变化和增加。
https://stackoverflow.com/questions/50749722
复制相似问题