Есть ли какой-либо способ (кроме HTTP-аутентификации, который, как я понимаю, по своей сути небезопасен через Интернет?) для веб-сайта "реальной жизни" для обработки логинов и аутентификации, а не традиционного способа, используя файлы cookie сеанса?
Существуют ли жизнеспособные альтернативы "классической" аутентификации cookie?
Ответ 1
HTTP-проверка подлинности (это совсем другой зверь от базовой проверки подлинности HTTP) достаточно безопасна по прямому HTTP-адресу, и вовсе не сложно реализовать на сервере. Ничего не отправляется по проводу, который мог бы показать, что такое пароль, просто информация, которая позволяет клиенту продемонстрировать серверу, что у них правильный пароль.
Если вы хотите получить достойное объяснение того, как реализовать аутентификацию дайджеста HTTP в своем приложении, Пол Джеймс имеет отличную статью об этом.
Единственная реальная проблема с проверкой подлинности HTTP заключается в самих браузерах: пользовательский интерфейс ужасен, но это может быть преодолеть с помощью Javascript.
Ответ 2
Базовая аутентификация HTTP абсолютно безопасна при использовании с сайтом SSL (https://), поскольку весь HTTP-трафик, включая учетные данные, будет зашифрован. Один субъективный недостаток заключается в том, что при использовании этого метода вашим пользователям необходимо будет взаимодействовать со своим всплывающим окном аутентификации браузера, чтобы войти на ваш сайт.
Ответ 3
Чтобы быть ясным, единственный способ сделать это - через HTTPS.
Но, поскольку я предполагаю, что это не вариант, и я также предполагаю, что вы ищете систему "полностью управляемого входа", я продолжаю:
Помимо HTTPS, можно использовать JavaScript для безопасного хэширования паролей на стороне клиента, чтобы предотвратить обнаружение простых текстовых паролей по проводу, но это только полурешение.
Проблемы с этим подходом:
- Повторная атака по-прежнему остается жизнеспособной.
- Только пользователи с включенным JavaScript смогут выполнять авторизацию таким образом.
Другой подход - более сложный механизм вызова/ответа:
- Отправьте "Задачу" вместе со страницей входа.
- Рассчитать хэш клиентской стороны Password + Challenge.
- Отправьте логин.
- Рассчитать хэш пароля + вызов (который НЕ ДОЛЖЕН быть доверен в запросе страницы) на стороне сервера и сравнить.
И проблемы с этим:
- Только пользователи с включенным JavaScript смогут выполнять авторизацию таким образом.
- Пароль PLAINTEXT должен храниться на сервере для проверки ответа на запрос и должен быть зашифрован на диске или иным образом защищен.
Теперь, если быть честным, проблема № 2 не такая уж большая опасность, как кажется. Фактически, когда вы используете HASH-аутентификацию, сам хэш поднимается до уровня" ключа".
На данный момент достаточно безопасно использовать куки файл для хранения случайно сгенерированного логина ReferrenceID, аналогичного его идентификатору сеанса, но сервер может захотеть зашифровать, используя ссылочный IP, как часть IV или KEY, чтобы другие пользователи не смогли захватить ссылку ReferrenceID.
В любом случае, я надеюсь, что это немного изменит ваш подход к дизайну.
Ответ 4
HTTP-аутентификация небезопасна при использовании HTTP.
Ответ 5
Во-первых, HTTP Auth защищен через SSL, кроме того, что вы не можете реализовать истинную функцию "Выход". Пользователь должен закрыть свой браузер, что очень плохо.
Во-вторых, вам нужно использовать HTTPS во всех случаях, чтобы сделать его безопасным, после чего вы получили базовый Auth аналогичный материал, такой как "Digest" и "NTLM Auth".
Ответ 6
Когда вы используете https, вы также можете установить сертификат в своем браузере клиента и убедиться в этом. myopenid предлагает это для своих учетных записей OpenID. У меня есть один, и он работает очень хорошо (с клиентской точки зрения).
Ответ 7
Использование SSL для шифрования в сочетании с HttpOnly Cookies, чтобы помочь предотвратить XSS, является лучшим выбором для использования файлов cookie. Я не скажу, что это пуленепробиваемый.