Соответствующие частичные строки для восстановления пароля - PullRequest
1 голос
/ 09 июня 2009

Я пытаюсь придумать регулярное выражение для этого, но безуспешно ..

Допустим, у вас есть секретный вопрос на вашем веб-сайте, чтобы человек мог восстановить пароль. Люди часто забывают, как именно они вводили информацию. Например, на вопрос «В какой компании вы работаете?» Пользователь может ответить «Microsoft Corp.». Но через месяц, когда им предлагается ответить на этот вопрос, они могут ввести «Microsoft», что не соответствует их первоначальному ответу, даже если они четко ответили правильно.

"Microsoft Corp." или "Microsoft Inc." или "Microsoft Co." будет соответствовать «Microsoft», а «Questar Gas» будет соответствовать «Questar Gas Co.». «Bank Corp. of America» НЕ будет соответствовать «Bank of America», потому что слово «Corp.» не находится в конце строки.

Каков наилучший способ сделать это?

Ответы [ 6 ]

4 голосов
/ 09 июня 2009

Я бы не стал слишком беспокоиться о том, что люди меняют свои ответы. Люди удивительно последовательны в том, как они отвечают на такие вопросы. Если я знаю, что ваша первая работа была в Microsoft, то, что я напечатал ее немного по-другому, может указывать на то, что я злоумышленник.

Избегайте размещения текстовых ответов в вашей базе данных. Это похоже на хранение незашифрованных паролей, что, безусловно, является плохой идеей. Если ваша база данных или резервная копия базы данных выйдут из-под вашего контроля, то у вас будет утечка личной информации вашего клиента. Может быть, это не попадет в чужие руки, но подумайте о письме, которое вы должны будете отправить своим пользователям. «Измените все сайты, где вы ответили на этот вопрос, одинаково.»

Вместо этого возьмите соленый хеш ответа и сохраните его в базе данных. Когда пользователь ответит на вопрос позже, используйте тот же алгоритм для хеширования своего ответа и сравните с сохраненным значением.

Вы можете использовать некоторую нормализацию, чтобы минимизировать влияние опечаток. Вы можете преобразовать в нижний регистр, а также удалить пробелы и знаки препинания. Например, «Microsoft Corp.» станет "microsoftcorp". Таким образом, если пользователь решит оставить период или добавить другой пробел, он все равно будет соответствовать.

3 голосов
/ 09 июня 2009

Соответствие регулярному выражению, вероятно, не лучший способ. Я говорю, что вы, вероятно, хотите использовать алгоритм «расстояния до строки», например Левенштейн или Джаро-Винклер , чтобы решить, насколько близок ввод пользователя к ожидаемому.

Хотя, чтобы ответить на вопрос Виктора о том, что он не слишком гибкий , убедитесь, что требуется очень высокий порог соответствия.

2 голосов
/ 09 июня 2009

Предоставьте два контрольных вопроса вместо одного. Я бы предпочел дать пользователю много вариантов, чем быть гибким с безопасностью.

Мышление вслух: Также вы можете показать предупреждение, говорящее что-то вроде: «Этот ответ будет запрошен, если вы забудете свой пароль, и вам придется писать его точно так же», если в строке слишком много пробелов или знаков пунктуации; )

1 голос
/ 09 июня 2009

Это распространенная проблема информатики.

Вы должны прочитать статью о расстоянии до строки, например, Расстояние Левенштейна и затем решите, как (и если) вы должны реализовать решение.

0 голосов
/ 09 июня 2009

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

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

0 голосов
/ 09 июня 2009

Если честно, я думаю, что один из лучших способов сделать это - ограничить ввод пользователя; вместо того, чтобы принимать «Microsoft Corp.», просто разрешите пользователю ввести одно слово (то есть «Microsoft») и напоминать ему при запросе информации о поиске пароля, что это было всего одно слово. Это одна из тех ситуаций, когда я думаю, что лучшим решением является ограничение ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...