Подтвердить что ты не робот

Безопасная аутентификация без SSL

Я начинаю писать небольшое веб-приложение и начинаю думать о защите входа (используется только для администрирования).

Если бы я мог, я бы установил CACert или самоподписанный SSL-сертификат, так как теперь я буду единственным, кто войдет в систему, но мой хост не слишком подходит.

Есть ли разумные варианты защиты сайта без SSL? Я думал о вариантах аутентификации:

  • Реализовать соленый хэш в JavaScript. Когда загружается страница входа в систему, создайте солевую сторону сервера. Отправьте его клиенту в ящике и сохраните его в переменной сеанса.

  • Дайджест аутентификации. Я просто нашел эту идею, просматривая SO, и это, вероятно, намного разумнее, чем катить мой собственный auth.

  • OpenID

    . Это открытый стандарт, пароли не требуются (и я могу "захватить" мой провайдер OpenID SSL, чтобы добавить безопасность в процесс входа в систему), но я понятия не имею, как работает OpenID или насколько он безопасен. (Нуждается в исследовании. Например, можно ли повторить повторную проверку OpenID?)

Проблема со всеми этими проблемами заключается в следующем:

  • Сессии могут быть захвачены
  • Только логин защищен, все остальное находится в прозрачном

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

Есть ли какое-либо шифрование (для pageloads и POST), которое может быть реализовано на моем языке сценариев на стороне сервера без благословения или участия моего хоста, но это будет поддерживаться браузером? Могут ли сеансы быть защищены от угона (практически) без SSL?

Что бы вы сделали в такой ситуации?

4b9b3361

Ответ 1

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

Если вам просто нужна простая аутентификация без реальной безопасности, ваш провайдер, вероятно, будет поддерживать HTTP Basic. Это (наряду с хорошим дизайном, который ограничивает возможности и резервные копии;) является разумным промежуточным решением, в то время как вы беспокоитесь о других проблемах.

Для аутентификации вашей личности OpenID не может быть воспроизведен. Каждая последовательность аутентификации подписывается. Однако OpenID сам по себе позволяет вам установить вашу личность с сервером. Это не позволит вам подписать или иным образом подтвердить подлинность запроса. OAuth, но для этого требуется шифрование трафика для части протокола.

Вы можете подписывать каждый запрос с общим секретом. Это предотвратит отправку или воспроизведение запроса злоумышленником, но сами запросы все еще могут быть прочитаны подслушивающим устройством. См. Документацию для аутентификации Amazon AWS (включая клиентские библиотеки) или аутентификацию flickr. Основной протокол:

  • требуется временная метка (и, вероятно, nonce) в качестве параметров запроса
  • нормализовать, сортировать, объединять все параметры запроса
  • объединить с URI, хостом, глаголом и т.д.
  • хэш с секретным ключом
  • отправить хеш в заголовке с запросом Сервер
  • делает то же самое и сравнивает подпись

Ответ 2

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

Ответ 3

Если вы зарегистрируете удаленный IP-адрес в сеансе, он не может быть захвачен. Кто-то, кто пытается использовать сеанс с другим IP-адресом, может быть легко обнаружен. PHP-сессии используют это по умолчанию (и я предполагаю, что это невозможно). Простое и эффективное решение.