Используйте PHP для сравнения строки с большим текстовым файлом (или ... базой данных?) - PullRequest
0 голосов
/ 07 июня 2018

У меня есть система входа в PHP 7, и я пытаюсь улучшить безопасность пароля.Я скачал огромный (15 гигабайт!) Список слов в https://crackstation.net/buy-crackstation-wordlist-password-cracking-dictionary.htm.. Я хочу настроить его так, чтобы при попытке пользователя установить новый пароль он сравнивался со списком слов и отклонялся, если был найден всписок.

Я не знаю, как открыть такой массивный файл в PHP и выполнить итерацию по нему, не сталкиваясь с проблемами памяти / ресурсов.Кто-нибудь может мне помочь с эффективным методом проверки строки по такому длинному списку?

(у меня также есть база данных MySQL, если это помогает, хотя я считаю, что предпочел бы оставить список в виде текстового файла.)

ОБНОВЛЕНИЕ: Я полагаю, что это будет включать в себя какую-то логику, похожую на процедуры сортировки, чтобы избежать обхода всего списка построчно?То есть - если пароль начинается с "z", я должен перейти прямо к "z" s ...

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я думаю, что лучше придумать шаблон ограничения и оценки, который создаст надежный пароль, и найти способ предотвратить использование такого списка в вашей системе, как ограничение попыток входа в систему с помощью одного и того же IP-адреса и повышение скорости, если общее число попыток попыткипревышает нормы, потому что список может меняться и увеличиваться каждый день.

0 голосов
/ 07 июня 2018

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 ++ .

...