Реализация Zend AMF и безопасность протокола AMF

У меня есть интерфейс Flex, подключенный через RemoteObject к Zend Amf от Zend Framework. Это мой единственный способ передачи данных между клиентским уровнем (Flex) и уровнями приложения и сохранения (LAMP с Zend Framework). Вот некоторые способы решения проблемы безопасности:

  1. Я могу обратиться к TLS, используя mx.messaging.channels.SecureAMFChannel в моем файле services-config.xml и убедившись, что Flash-плеер загружается в оболочку HTTPS и фактически использует HTTPS, поскольку протокол AMF расположен поверх HTTP.
  2. RemoteObject имеет метод setCredentials, с помощью которого я могу передавать заголовки аутентификации AMF для защиты данных, связанных с пользователем. Предполагая, что TLS действительно безопасен, я могу предоставить методы в конечной точке после аутентификации пользователя.
  3. Я могу защитить себя от межсайтовых сценариев и других уязвимостей FLASH, правильно настроив crossdomain.xml

У меня возникает вопрос, как защитить свою конечную точку от другого потребителя AMF? Например, если бы был другой потребитель AMF (не Flash, поэтому не связанный crossdomain.xml и безопасностью песочницы Flash), кроме моего клиента Flex, который знал мою конечную точку, что могло бы помешать ему использовать методы, предоставляемые конечной точкой?

Насколько я знаю, мне, по сути, нужен способ аутентификации моего приложения Flex на моей конечной точке Zend Amf. После аутентификации потребителя AMF у меня есть некоторые из упомянутых выше механизмов безопасности для защиты определенных фрагментов данных (например, аутентификации пользователя). Я не могу встроить какой-то механизм аутентификации в свой Flex swf, потому что swf уязвим для декомпиляции (swf нельзя доверять). Хотя конфиденциальные данные защищены с помощью аутентификации пользователя, незащищенные данные вряд ли станут общедоступными, но, насколько я могу судить, они полностью открыты для публичного использования.


person Brandon    schedule 15.01.2010    source источник


Ответы (2)


Вы не можете запретить кому-либо отправлять произвольные HTTP-запросы к вашей конечной точке. Если ваше приложение Flex проверяет подлинность пользователей на сервере, и сервер обслуживает конфиденциальные данные только в том случае, если в запросе есть правильные учетные данные / идентификаторы сеанса, все в порядке. Чего вы не можете сделать, так это аутентифицировать пользователя и сохранить в клиенте только то, что пользователь аутентифицирован. Поскольку HTTP - это протокол без сохранения состояния, сервер должен иметь возможность авторизовать каждый запрос индивидуально. То же самое и с «обычными» сайтами и AJAX.

person Simon    schedule 16.01.2010

Клиент AMF не может знать, кто им звонил, если не предусмотрена какая-либо аутентификация. Любой HTTP-запрос, который отправляет Flex, может быть эмулирован средствами, отличными от Flex, и, как вы правильно заметили, можно извлечь любой встроенный ключ. Таким образом, для этого нет универсального решения, хотя вы, вероятно, могли бы что-то придумать, если бы предоставили свои клиентские сертификаты для HTTPS-соединения и заставили сервер проверять клиентские сертификаты.

person StasM    schedule 20.01.2010