Реализация 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 нельзя доверять). Хотя конфиденциальные данные защищены с помощью аутентификации пользователя, незащищенные данные вряд ли общедоступны, но, насколько я могу судить, полностью открыты для публичного использования.

2 ответа

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

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

Другие вопросы по тегам