Это приемлемо для передачи пароля? - PullRequest
0 голосов
/ 17 июня 2009

У меня есть веб-сайт, который требует от пользователя аутентификации с помощью имени пользователя и пароля. Я хотел бы использовать SSL, но у меня нет сертификата SSL. Но я делаю что-то еще, что я считаю нормальным.

Мой сайт в основном основан на AJAX и требует JavaScript, иначе ничего не будет работать.

Когда пользователь пытается войти в систему, я запрашиваю базу данных, используя AJAX, чтобы найти соль для этого имени пользователя, если ничего не найдено, возвращается случайная соль (чтобы люди не знали, есть ли пользователь с таким именем пользователя) или нет). Затем, используя функцию MD5 для JavaScript, я хеширую и солю пароль 4K раза (как в Linux, когда он использует MD5 для хеширования пароля) на стороне клиента, затем я передаю этот хеш серверу в виде простого текста. Затем этот хэш будет хеширован еще несколько раз и представлен для проверки того, что находится в базе данных.

Это безопасно? Если нет, то как я могу защитить его, не переплачивая наличными за сертификат SSL для в основном внутреннего веб-сайта?

Ответы [ 4 ]

15 голосов
/ 17 июня 2009

Нет. Это не безопасно. Человек посередине может отследить хэшированное значение и представить его вам позже, ложно аутентифицируя себя.

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

Использовать SSL. Вы можете получить бесплатные сертификаты , принятые Firefox, и дать пользователям IE инструкции по добавлению нового CA в их доверенные корни. Сертификаты, которые принимаются всеми браузерами из коробки - это дешево, я думаю, 30 долларов в год.

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

Лучшие варианты:

  • Используйте сертификат, подписанный StartCom (бесплатно). Поддерживается изначально в последних версиях Firefox и Safari. Пользователи с IE могут добавить CA в свой список доверенных корней.
  • Используйте самозаверяющий сертификат и раздайте его своим пользователям для добавления в их браузеры.

Как уже упоминали другие, ваше решение небезопасно. Он не предлагает улучшения по сравнению с отправкой пароля в виде открытого текста на сервер. Основные причины:

  • Все, что отправлено клиентом в виде открытого текста и напрямую использовано для аутентификации, будет подвержено атакам типа «человек посередине» и подслушиванию. В предлагаемом решении, если вы знаете хешированный пароль, вы можете войти в систему. Отправка пароля в виде хэша не имеет значения.
  • После аутентификации данные по-прежнему отправляются в виде открытого текста, поэтому их легко можно прослушать.
  • MD5 полон дыр
2 голосов
/ 17 июня 2009

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

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

Это действительно зависит от того, насколько важна безопасность для этого приложения. Если это очень важно, отбросьте Ajax, возьмите сертификат SSL и используйте слой HTTPS.

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

Ваше решение открыто для повторных атак. Попробуйте Дайджест-аутентификацию (RFC 2617) непосредственно между браузером и веб-сервером.

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