Угловой JS проверяет токен CSRF в запросе POST

Я использую AngularJS с рельсами. У меня есть следующий запрос, который обновляет пользователей.

 $http{
    method: 'POST',
    url: $scope.update_url,
    params: {selected_ids: userIds}
 }

это не может быть запросом " GET " из-за ограничений по длине URL (http://support.microsoft.com/kb/208427)

но для запроса "POST" нам нужно иметь маркер подлинности CSRF в заголовке.

Как мы можем установить токен CSRF в заголовок запроса post?

3 ответов


вы можете установить заголовки http, как описано в $http сервис.

вы можете настроить его глобально:

$httpProvider.defaults.headers.post['My-Header']='value'   (or)
$http.defaults.headers.post['My-Header']='value';

или для одного запроса:

$http({
   headers: {
      'My-Header': 'value'
   }  
});

вот важная цитата из Угловое:

предохранение от подлога запроса перекрестного места (XSRF) XSRF метод мимо который несанкционированном месте может получить личные данные пользователя. Угловатый обеспечивает следующий механизм для противодействия XSRF. Когда выполняя то XHR запросы, служба $http считывает токен из файла cookie с именем XSRF-TOKEN и устанавливает его как HTTP-заголовок X-XSRF-TOKEN. Поскольку только JavaScript, который работает в вашем домене, может читать cookie, ваш сервер можно быть уверенным, что XHR пришел из JavaScript, работающего на вашем домен.

чтобы воспользоваться этим, ваш сервер необходимо поставить маркер в JavaScript-код чтения файла cookie сеанса называется с XSRF-маркер на первый HTTP-запрос GET запрос. На последующее non-GET запросов сервер может проверить, что cookie соответствует http-заголовку X - XSRF-TOKEN и поэтому убедитесь, что только JavaScript, запущенный в вашем домене, мог прочитать токен. Этот маркер должен быть уникальным для каждого пользователя и проверяться сервер (для предотвращения создания собственных токенов JavaScript). Мы рекомендуется, чтобы маркер был дайджестом проверки подлинности вашего сайта печенье с солью для дополнительной безопасности.


Если вам интересно, как на самом деле установить значение cookie XSRF-TOKEN в Rails, этот ответ имеет реализацию рельсы CSRF защита + угловой.js: protect_from_forgery заставляет меня выйти из POST


недавно я столкнулся с той же проблемой и добавил камень angular_rails_js ее решили. Насколько я понимаю, он создает для каждого контроллера rails cookie с CSRF-токеном rails, который будет catch (default $http behaviour) по angular $http.