Безопасный вход в PHP - параметры на стороне клиента?

Хорошо, теперь я в замешательстве. Я получаю советы от пользователей SO по библиотекам для использования с codeigniter для аутентификации. Я изучил dx_auth и simpleloginsecure (думаю, я буду использовать последний из-за его предполагаемого безопасного хеширования и небольшого размера).

НО, а как насчет хеширования пароля на стороне клиента? Я не видел никаких упоминаний об этом в документации библиотек. Независимо от того, насколько безопасны эти библиотеки, не нужно ли какое-то шифрование на стороне клиента (js), чтобы пароли никогда не публиковались в виде простого текста? Или я что-то упустил, и эти библиотеки каким-то образом покрывают это...

Спасибо

Обновление: пара ответов ниже предлагает SSL. Однако у меня сложилось впечатление, что эти библиотеки php (плагин codeigniter) были вместо SSL (я здесь полностью ошибся)? Если я ошибаюсь, есть ли безопасный способ сделать это без SSL? (Раньше я использовал хеш-функцию javascript md5 для шифрования пароля перед его публикацией... но я надеялся на что-то более безопасное).

Обновление 2 Итак, похоже, все согласны с тем, что мне следует использовать SSL. Если это так, то какой смысл во всех этих причудливых библиотеках аутентификации php, которые выполняют всевозможное хеширование. Если SSL позаботится о шифровании от клиента к серверу, то какой смысл использовать эти библиотеки (dx_auth и т. д., кроме, возможно, добавления возможностей роли)? Это просто для обеспечения безопасного хранения данных на сервере/базе данных? (Я бы сравнил уровень конфиденциальности данных в проекте, над которым я работаю, с уровнем stackoverflow.. никаких кредитных карт или чего-либо чрезмерно конфиденциального, только имя пользователя, пароль и т. д.)


person oym    schedule 23.07.2009    source источник


Ответы (5)


Чтобы зашифровать данные на стороне клиента, вам потребуется ssl.

В основном ssl отправляет браузеру ключ шифрования в начале каждого сеанса, с помощью которого затем шифруются пост-переменные и т. Д., И снова расшифровываются на другом конце сервером.

Шифрование JS может фактически сделать вашу систему менее безопасной, так как раскроет ваш алгоритм хеширования.

ОБНОВЛЕНИЕ:

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

person Nico Burns    schedule 23.07.2009

Не зная ни единой точки о CodeIgniter, я думаю, что ваши варианты будут:

  1. Включите JavaScript и хэшируйте пароль перед его отправкой. Это вообще возможно?

  2. Используйте SSL-соединение.

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

И, наконец, если у кого-то есть кейлоггер или другое вредоносное ПО на своем ПК, это в любом случае сделает хеширование на стороне клиента бессмысленным.

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

person EvilChookie    schedule 23.07.2009

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

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

Однако есть альтернативы. Вы также можете использовать схему аутентификации вызов-ответ, если вам не нужен SSL, но это имеет и некоторые недостатки. Это действительно зависит от того, что вы делаете на сайте.

person John Rasch    schedule 23.07.2009

Нет никакого преимущества в шифровании на стороне клиента. Если вы не используете SSL, то данные могут быть перехвачены несмотря ни на что. Таким образом, даже если вы хэшируете пароль, скажем, с помощью md5, хеш md5 все равно отправляется в виде простого текста, затем перехватывается и может быть отправлен обратно на страницу входа третьей стороной. Конечно, они могут не знать необработанный пароль, но они все равно могут получить доступ. Если вы беспокоитесь о безопасности, либо создайте самоподписанный сертификат, либо заплатите 10 долларов реселлеру RapidSSL за доверенный сертификат.

person Mark    schedule 23.07.2009
comment
эм... Марк, наличие хэша НЕ позволяет кому-либо получить доступ к вашему сайту, если вы не разрешите это, что я бы не рекомендовал. - person Nico Burns; 23.07.2009
comment
Я знаю об этом. Если вы шифруете на стороне клиента с помощью javascript, о чем говорится в вопросе, то приложение должно будет это разрешить. - person Mark; 23.07.2009

Позвольте браузеру и серверу обрабатывать все шифрование паролей за вас. Для этого убедитесь, что вы используете безопасное соединение (в этом случае протокол будет https, например, https://www.example.com. Вам потребуется настроить сервер для приема защищенных соединений. Попробуйте google, чтобы получить несколько советов.

person a_m0d    schedule 23.07.2009