## Механизм 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