---
# System prepended metadata

title: Модуль №6
tags: [MOE]

---

## Механизм Same Origin Policy

Это механизм защиты, который встроен в браузер и позволяет защититься от отправки запросов на сторонние домены через JS.

Например, если есть адрес:

http://normal-website.com/example/example.html


| URL accessed | Access permitted? |
| -------- | -------- |
| http://normal-website.com/example2/     | Yes: same scheme, domain, and port     |
| https://normal-website.com/example/     | No: different scheme and port     |
| http://en.normal-website.com/example/     | No: different domain     |
| http://www.normal-website.com/example/     | No: different domain     |
| http://normal-website.com:8080/example/     | No: different port*     |


### Механизмы Cross Origin Resource Sharing (CORS):

Cross-origin resource sharing (CORS) -  так же является механизмом браузера, который позволяет произвести доступ к ресурсам за пределами одного  origin. 

Придуман был для того, чтобы была возможность обойти механизм SOP.

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

## Примеры реализации

**CORS** работает в первую очередь для браузера, но, механизм срабатывает, когда выполняются совместные действия с сервером. 

Для этого браузер добавляет заголовок **origin**, а сервер в свою очередь должен ответить заголовком **Access-Control-Allow-Origin**. 

По спецификации, эти заголовки должны быть проверены, и, если совпадают, то взаимодействие будет продолжено.

## Уязвимости, ошибки конфигурации

Приложение может стать уязвимым к атаке, если:

- сервер зеркалирует данные в заголовке **Access-Control-Allow-Origin**
- сервер недостаточно хорошо проверяет заголовок **origin**
- сервер использует **null** для **Access-Control-Allow-Origin**
- для внутренней сети используется заголовок Access-Control-Allow-Origin: *

### Атаки Cross-site Request Forgery (CSRF):

Cross Site Request Forgery - уязвимость, которая позволяет злоумышленнику выполнять операции в приложении от имени другого пользователя или приложения.

Основной метод, который используется для атаки - составление запроса, который при открытии легитимным пользователем, будет отправлен в приложение.

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

## Причины возникновения

- Кросдоменное взаимодействие
- Отсутствие или неверная конфигурация заголовков

## Последствия эксплуатации

Выполняются взаимодействия с приложением без ведома пользователя. Используемые функции могут быть любыми в рамках работы приложения. 

Обычно целью становятся "критичные" функции - отправка сообщения, платеж, создание или удаление аккаунта.

## Способы защиты

Защита от мисконфигурации CORS - использование механизма только для "доверенных" доменов, так же не стоит обращать внимание на значения заголовков сервера **Access-Control-Allow-Origin**.

Защита от **CSRF** может включать механизмы:

- CSRF токены
- SameSite куки параметр Strict
- Refer, проверка


### Практика



https://portswigger.net/web-security/csrf/bypassing-samesite-restrictions/lab-samesite-strict-bypass-via-client-side-redirect

https://portswigger.net/web-security/csrf/bypassing-referer-based-defenses/lab-referer-validation-depends-on-header-being-present

https://portswigger.net/web-security/csrf/bypassing-referer-based-defenses/lab-referer-validation-broken
