Как защитить учетные данные во время Flex ChannelSet.login?

Мне только что пришло в голову, что когда мое приложение Flex выполняет ChannelSet.login, оно по сути отправляет имя пользователя и пароль по сети в незашифрованном виде на сервер BlazeDS. Хотя я использую двоичный протокол AMF через AMFChannel, никому не нужно обнюхивать эти пароли.

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

Должен ли я сам зашифровать учетные данные перед вызовом входа в систему? Думаю, тогда мне нужно знать алгоритм шифрования на стороне сервера.

Мысли?


person HDave    schedule 18.09.2010    source источник


Ответы (2)


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

Существуют и другие методы (SSO, PreAuthentication, SessionKeys), но если ваши клиенты не будут использовать SSL или будут готовы заставить своих пользователей использовать самоподписанный SSL-сертификат с подписью Selg, то я сомневаюсь, что они пойдут на альтернативы.

Если вы беспокоитесь о том, что имя пользователя / пароль компрометируются, то минимальным требованием является SSL при использовании ChannelSet.login с именем пользователя и паролем.

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

person David Collie    schedule 18.09.2010
comment
Похоже, общее шифрование - лучший вариант. Возможно, можно было бы использовать имя пользователя как соль. Я знаю, что невозможно остановить решительного взломщика, но все лучше, чем ничего. - person HDave; 18.09.2010

Если вы используете Java, лучше всего использовать Spring Security.

http://www.adobe.com/devnet/flex/articles/flex_security.html на английском языке

person AntuanF1    schedule 20.09.2010
comment
Это хорошая статья, но код автора страдает той же фатальной уязвимостью безопасности, которую представляет этот вопрос. Его клиент Flex отправляет имя пользователя и пароль в незашифрованном виде в серверную часть безопасности Spring для аутентификации. Решение легко взломать. Это похоже на огромный пуленепробиваемый сейф с кодом, написанным на наклейке, приклеенной к двери! - person HDave; 20.09.2010