Обработка CSRF с помощью приложения Adobe Flash с использованием бэкэнда Django

Я создаю флеш-игру, которая использует Django в качестве бэкэнда.

В настоящее время у меня есть конечная точка API, настроенная с использованием django-tastypie, которую приложение Flash может вызывать для получения данных JSON для заполнения приложения.

Я понимаю, что с помощью простых представлений django и системы шаблонов можно просто включить csrf_token на веб-страницу с помощью промежуточного программного обеспечения.

Теперь моя проблема заключается в попытке отправить данные обратно на сервер без использования csrf_exempt, и в идеале приложение flash можно запускать без вставки тегов params. Надеюсь, автономный файл swf, который будет работать как есть.

Как получить csrf_token во флеш-приложение, чтобы оно могло отправлять данные обратно на сервер без проблем с безопасностью?

Если способ csrf_token невозможен, есть ли другие способы безопасного размещения данных?

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

Заранее спасибо.


person VKen    schedule 13.06.2012    source источник


Ответы (1)


Похоже, у вас могут быть две проблемы:

Как на самом деле отправить токен CSRF с моими POST-запросами из Flash?

Django также принимает токены CSRF через заголовок X-CRSFToken. см. документы здесь.

Вы можете добавить заголовки к вашему запросу следующим образом:

var req:URLRequest=new URLRequest();
req.url="http://somesite.com";
var header:URLRequestHeader=new URLRequestHeader("X-CSRFToken","foobar");
req.requestHeaders.push(header);

Документация по URLRequests находится здесь.


Как мне получить токен CSRF в моем файле Flash?!

(Вариант A) Поскольку токены CSRF генерируются на основе для каждого запроса (например, с использованием шаблона традиционной HTML-формы по запросу GET), проще всего передать токен CSRF во Flash. файл через шаблонный параметр. Что-то вроде: <param name="csrf_token" value="{{ my_csrf_token }}" />

(Вариант B) Похоже, вы не хотите делать параметр, поэтому ваш последний вариант — создать собственное представление Django, единственная функциональность которого заключается в доставке CSRFToken в ваш файл Flash. Таким образом, поток будет загружаться вашим файлом Flash, ваш Flash делает запрос GET к http://mysite.com/csrf_token/, который просто возвращает действительный токен CSRF, а затем вы можете использовать этот токен для выполнения POST. (Обратите внимание, что вам нужно будет сделать запрос GET для каждого запроса POST).

person Chris W.    schedule 15.06.2012
comment
Привет Крис, спасибо за подробное объяснение. Вариант B звучит как возможный план, но я не уверен в последствиях для безопасности открытия конечной точки только для получения токена csrf, потому что заголовки рефералов можно подделать. Что вы думаете об этой потенциально возможной уязвимости, и действительно ли это опасение? - person VKen; 18.06.2012
comment
@vken, я не эксперт по безопасности, поэтому не думаю, что понимаю все последствия CSRF, сгенерированного AJAX. Ознакомьтесь с этим вопросом для получения дополнительной информации. Однако я считаю, что вы защищены с помощью методологии в варианте B. - person Chris W.; 18.06.2012
comment
Более релевантные запросы AJAX для CSRF: безопасный токен защиты сеансов csrf"> stackoverflow.com/questions/144696/ - person Chris W.; 18.06.2012