Внедряване на Zend AMF и сигурност на AMF протокола

Имам интерфейс на Flex, свързващ се чрез RemoteObject към Zend Amf на Zend Framework. Това е единственото ми средство за транспортиране на данни между клиентския слой (Flex) и слоя на приложението и постоянството (LAMP със Zend Framework). Някои начини, по които мога да се справя със сигурността, са следните:

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

Въпросът, който имам, е как да защитя крайната си точка срещу друг потребител на AMF? Например, ако имаше друг потребител на AMF (не Flash, така че не е обвързан от crossdomain.xml и сигурността на Flash sandbox), различен от моя 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