Не без SSL
Це не є безпечним, якщо пароль надсилається по мережі простим текстом. Зберігання пароля на стороні сервера також не є безпечним, якщо пароль надсилається по мережі в простому тексті.
Оскільки <input type="password"/>
тег HTML надсилає його вміст у простому тексті, це буде проблемою, незалежно від того, як ви зберігаєте пароль на сервері, якщо ваш веб-сайт не використовує SSL для передачі пароля.
(Автентифікація HTTP, яка спливає діалогове вікно в браузері з проханням ввести пароль, може бути, а може і не бути чітким текстом, залежно від того, які механізми аутентифікації мають спільний сервер і браузер. Таким чином, це може бути способом уникнути цього без використання SSL.)
Ні, якщо адміністратори сайтів підозрюються
Тепер, припустимо, що ви використовуєте HTTPS для веб-сайту, це може бути безпечним, якщо ви довіряєте адміністраторам свого сайту (які можуть читати просто текстові паролі) та іншим людям, які мають доступ до машини, щоб правильно поводитися. Тепер може бути очевидним, що вони можуть робити все, що завгодно, з вашим веб-сайтом (оскільки вони адміністративують його), але якщо вони зможуть прочитати пароль, вони також зможуть використовувати вкрадені пари для входу / пароля на сайтах інших людей.
Спосіб, що захищає паролі від адміністратора
Один безпечний спосіб зберігання та перевірки паролів:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
Для хеш-функції спробуйте використовувати щось сильне і те, що ще не має гарних райдужних таблиць у дикій природі. Ви можете змінити довжину солі, якщо це необхідно, обробляючи райдужні столи.
Залежно від середовища, в якому ви перебуваєте, від мінливості вашої затримки в мережі та від того, чи призначені публічно відомі імена користувачів, вам може знадобитися інший розрахунок шляху коду, hash('0000'+entered_password)
якщо користувача не існує, щоб запобігти появі зловмисників визначаючи, які імена користувачів є дійсними, виходячи з часу, необхідного для визначення, що пароль невірний.