Не вдалося здійснити реєстрацію спроб входу, відкриває паролі


38

Я почав реєструвати невдалі спроби входу на свій веб-сайт таким повідомленням

Failed login attempt by qntmfred

Я помітив, як виглядають такі журнали

Failed login attempt by qntmfredmypassword

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

Чи є кращий спосіб впоратися з цим? Чи варто навіть турбуватися про таку можливість?


14
Так, ви повинні турбуватися про це.
FoolishSeth


4
Цікаве питання, оскільки він перетинає UX та безпеку. Як зазначається в одному з посилань Майкла, ви можете запобігти більшості випадків за допомогою Javascript (на стороні клієнта). Відключити кнопку входу, поки поле пароля порожнє. Користувачі без Javascript все ще можуть використовувати екран входу таким чином, оскільки кнопка в цьому випадку не буде відключена.
MSalters

Відповіді:


65

Спробуйте так:

Якщо ім'я користувача існує, увійдіть до журналу "не вдалася спроба входу username". Якщо ні, 123.45.67.89натомість увійдіть "помилка спроби входу через IP ". Це повинно вирішити проблему випадкового появи паролів у журналі.


14
Ви також можете перевірити наявність порожнього пароля і вийти з ладу з відповідною помилкою в цьому випадку.
Майк Веллер

Друк імені користувача - це проблема, яку описував ОП. Іноді невдале вхід в систему спричиняється тим, що користувач пропускає клавішу [вкладку] і швидко вводить ім’я користувача та пароль у поле імені користувача та натискає клавішу Enter. Ваша пропозиція не справляється з цим.
BZink

7
@BZink: Так, це так. Якщо ім'я користувача є , введіть його як таке. Якщо те, що користувач робить випадково, додає пароль до імені користувача, отримана рядок майже точно не буде також дійсним ім'ям користувача.
Мейсон Уілер

12

Чому б не просто перевірити, чи існує таке ім'я користувача в базі даних? Це дозволить отримати два можливі результати.

  1. Користувач ввів правильне ім’я користувача. Потім ви можете просто записати те, що ви входите зараз.

  2. Користувач ввів свій пароль у поле користувача, тому ім’я користувача недійсне. Просто введіть запис журналу, кажучи, що не вдалося спроби входу невстановленим користувачем?

І звичайно, у вас може бути додаткове поле для реєстрації ip, дати та чого ні?


3
Чому б не додати хеш імені користувача до запису журналу №2. Це дозволить приховати пароль, але в той же час дозволить комусь, хто переглядає журнали, визначити, чи є кілька спроб одного і того ж невстановленого користувача.
emory

Якщо немає запису, що містить ім’я користувача, очевидно, що вони помилилися, тому це все ще корисно для усунення неполадок.
JeffO

2
@emory, якщо користувач помилково ввів свій пароль разом із ім'ям користувача, не існує можливого способу вилучити лише частину рядка імені користувача. І я думаю, що хтось неодноразово вводить свій пароль у поле ім’я користувача - це дуже малоймовірно. Це помилка "разового відключення", яку ви робите. Відбувається найкращим з нас, але я сумніваюся, що є хтось досить дурний, щоб продовжувати це робити, не усвідомлюючи цього: D
galdikas

@galdikas Не потрібно нічого витягувати з імені користувача. Наприклад, я користувач "користувач" з паролем "пароль". Я входжу з "userpassword", а ваша хеш-функція відображає "userpassword" на 17. У журналах буде написано "Не вдалася спроба входу невстановленим користувачем 17".
emory

1
@galdikas Напевно, не є хтось дурний чи наполегливий, щоб продовжувати це робити більше декількох разів, але є сценарії, які досить дурні і наполегливі, щоб зробити це тисячі разів. Не хотіли б ви знати різницю?
emory

1

Міркування:

  1. Чи можете ви виявити, коли це сталося, на відміну від того, щоб хтось вводив ім'я користувача? Реєстрація помилкових імен користувачів може бути корисною для цілей підтримки, тобто, відповідаючи на питання "чому я не можу увійти", відповівши "Ви неправильно ввели своє ім'я користувача, це має бути тире, а не крапка", або "У вас є провідна двокрапка" потім пробіл - чи вирізали ви і вставляли його ". Якщо у вас є невелика кількість високооплачуваних користувачів (тобто це ще не інший сайт соціальних мереж), вам, ймовірно, доведеться надавати подібну підтримку.

  2. Яка відповідна дія повинна чинити хтось? Імена користувачів можуть бути показниками спроб злому. Те, що ім’я користувача не відображається у вашому списку, не означає, що вам не потрібно знати, що це було. Однак якщо ви вважаєте, що це серйозна проблема, і ви могли виявити, чий це був пароль, ви можете вимагати від користувача змінити свій пароль після цього.

  3. Що таке галузева практика? Галузева практика полягає в реєстрації поля імені користувача, але не в полі пароля. Ви навряд чи вас звільнять за це.

Якщо у вас не є звичайні міркування, я б запропонував дотримуватися галузевої практики та ввести поле ім’я користувача, незалежно. Розгляньте вимушені зміни паролів як пропозицію 2, якщо ви вважаєте, що це недостатньо.


1

Просто для того, щоб бути безпечним, реєстрація в моєму поточному додатку не зберігає параметри, передані для входу або методів скидання пароля. Виклик журналу має необов'язковий параметр, який керує цим, який, коли встановлено значення true, замінює об'єкт збережених параметрів на [Redacted]. Звичайно, тому я пропускаю трохи даних, але у мене є їхні IP-адреси, і я краще не ризикую отримати щось чутливе в простому тексті.

Якщо ви дійсно хочете зареєструвати подібні речі, я б радив, щоб під час реєстрації спроби входу ви перевіряли базу даних для користувачів з ім'ям, що відповідає тому, що у вас є у полі імені користувача, і зберігаєте її лише у тому випадку, якщо у вас є відповідність. В іншому випадку ви просто зберігаєте його як "невідомого користувача". Ви можете пофантазувати, перевіривши, чи містить це значення те чи інше, але завжди є ризик отримати комбінації, такі як [Користувач] [Пароль] та [КористувачPas] [меч], і в цьому випадку ви можете перевірити IP-адресу та вивести це ви ненароком зберегли початок чийогось пароля в чистоті. Ви можете поширити це на малоймовірні, але можливі [Користувач] [Пароль] та [UserPassword] [??], і в цьому випадку ви можете побачити "невдалий вхід від UserPassword" з подальшим "Успішним входом користувача" та вивести всіпароля користувача. Як правило, для безпеки я б сказав, щоб не реєструвати імена користувачів, якщо реєстрація не буде успішною.

Редагувати, щоб додати:

Більшість аргументів, які публікують люди для реєстрації імені користувача для невдалих спроб входу, на мою думку, краще обробляються за допомогою інших методів.

Наприклад, сказано, що, коли клієнт запитує "чому я не можу ввійти?", Іменовані імена користувачів дозволять вам вказати помилки друку. Це правда, але ризикувати захопленням паролів також не варто; Я б це зробив, замість того, щоб переспрямовувати користувача назад до форми входу під час відмови, виділяючи поле ім’я користувача та повторно заселяючи його тим, що вони ввели, щоб вони могли бачити самі.

Ще один аргумент полягав у тому, що він дозволяє ідентифікувати спроби злому; рядок відмов проти одного імені користувача цілком може бути спробою жорстокого введення пароля. Я б зробив це, встановивши стовпчик "BadLogins" на таблиці "Користувачі", який збільшується кожного разу, коли вхід не вдається з ім'ям користувача, що відповідає цьому користувачеві, і скидається до нуля при успішному вході після повідомлення користувача "там були x невдалі спроби входу з моменту останнього входу "та порадивши їх, що робити, якщо вони не вважають, що спроби були з них". Якщо ви хочете бути дуже ретельними, у вас може бути інший стовпець, який зберігає останнє значення стовпця BadLogins навіть після успішного входу, та / або стовпець, який зберігає найвище значення цього стовпця та / або стовпець, який зберігає загальну кількість помилкових входів, які цей обліковий запис коли-небудь мав.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.