CSRF-защита для сообщений о загрузке файлов

У меня есть приложение angularJS, в котором я использую механизм защиты CSRF Angular для всех POST, PUT и другие вызовы небезопасных веб-служб. Это работает хорошо, за исключением одного случая: POST multipart/form-data, который загружает файл на сервер.

В этом случае, поскольку я отправляю данные формы и файла непосредственно в веб-службу, угловая служба $http не участвует и, следовательно, не добавляет заголовок CSRF к запросу так, как это делается с запросами XHR.

У меня есть пара вопросов:

  • мне нужно защитить этот POST от CSRF (я думаю, что да)
  • могу ли/как я могу заставить Angular добавить заголовок CSRF в запрос POST?

person Paul Taylor    schedule 03.12.2013    source источник


Ответы (2)


Если вы загружаете файл на сервер с помощью XHR через jQuery, вы можете добавить заголовок по умолчанию:

$.ajaxSetup({
    headers: {
        "requestVerificationToken": myToken
    }
});
person iKBAHT    schedule 05.12.2013
comment
Да. Я могу сделать то же самое, используя службу angular $http, но я использую компонент angular, называемый ngUpload, который использует сообщение формы (я полагаю, внутри IFrame). - person Paul Taylor; 05.12.2013
comment
В ngUpload есть опция upload-options-enable-rails-csrf. Он включает поддержку CSRF, добавляя скрытое поле формы с токеном csrf. - person iKBAHT; 05.12.2013
comment
Интересно, я не знал, что этот подход использовался с этой опцией. Это может сработать. Будет расследовать. - person Paul Taylor; 05.12.2013

В конце концов я решил, что, поскольку пост был сделан с помощью формы, а не AJAX, метод должен был быть в стандартном контроллере MVC, а не в WebAPI. Таким образом, я мог бы использовать стандартный помощник MVC Html.AntiForgeryToken в форме и атрибут ValidateAntiForgeryToken в методе.

person Paul Taylor    schedule 13.12.2013