CSRF для RESTful API

Насколько я понимаю CSRF, это очень простая схема:

  1. Пользователь (Боб) имеет файлы cookie для аутентификации MyApp.com в своем браузере.
  2. Злоумышленник отправляет Бобу электронное письмо со ссылкой на веб-сайт MyApp-Crack.com с помощью волшебной кнопки «Нажмите, чтобы выиграть 10.000 долларов», которая представляет собой button = «sumbit» простой скрытой формы с действием = «myapp.com/user/delete-account». php "method =" POST "
  3. Нажатие на эту кнопку создает запрос POST к myapp.com/user/delete-account.php с cookie-файлами аутентификации Боба.
  4. Запрос аутентифицируется, и желаемое действие выполняется.

Представьте, что MyApp.com - это чисто SPA с бэкэндом RESTful, url в примере (myapp.com/user/delete-account.php) скорее RESTful API (myapp.com/API/delete-account.json) и вызывается только и только из браузеров javascript (angular) или мобильного приложения (которое использует JWT).

Идея: если я добавлю определенный заголовок в любой запрос в JavaScript:

headers.append('X-MyApp-Source', 'angular-app');

и добавьте проверку на стороне сервера:

if (user.AuthType == "cookies" && !request.Headers.Contains("X-MyApp-Source"))
{
   return (400, "Bad request, missing source header");
}

Есть ли способ, как злоумышленник может создать запрос с помощью файлов cookie Боба с заголовком запроса?

  • MyApp.com не может быть встроен в iframe X-Frame-Options
  • скрытая форма html на MyApp-Crack.com не добавит этот заголовок
  • javascript в другом домене добавляет заголовок, но не отправляет файлы cookie
    • это неправда. Атрибут XMLHttpRequest.withCredentials: true будет отправлять файлы cookie.

Я не говорю, что моя идея пуленепробиваемая, просто brianstorm.

Спасибо!

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
225
1

Ответы 1

Почему MyApp-Crack.com не использует withCredentials: true для отправки соответствующего файла cookie аутентификации на myapp.com? Он не может прочитать значение cookie, но все же может его отправить.

Также для добавления заголовка можно использовать старый (или намеренно вредоносный) плагин или расширение браузера (старая версия Java, Flash и т. д.). Это примерно то же самое, что и проверка Referer / Origin для защиты от CSRF - намного лучше, чем ничего, но не лучшее, что вы можете сделать.

Таким образом, в идеальных условиях он не уязвим напрямую, но и не очень надежен.

Кошоном Габором! Итак, мое последнее утверждение не соответствует действительности. Javascript в другом домене добавляет заголовок и отправляет файлы cookie.

Luke1988 26.03.2018 09:24

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