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