Курс на мисконфиги. Как поймать проблемный CORS на проде

Содержание статьи

  • Same Origin Policy
  • Cross-Origin Resource Sharing (CORS)
  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials
  • Простые и сложные запросы
  • Запросы pre-flight
  • Частые ошибки конфигурации CORS
  • Отражение Origin в ответном заголовке
  • Значение null в белом списке
  • Ошибки парсинга заголовка Origin
  • В поисках мисконфигов
  • Тестирование
  • Результаты
  • Выводы

В этой статье мы рас­ска­жем, как работа­ет тех­нология SOP, которая защища­ет твой бра­узер от вре­донос­ных скрип­тов. Раз­берем основные виды мис­конфи­гов и сос­тавим шпар­галки с раз­ными слу­чаями поведе­ния CORS. В кон­це раз­берем при­мер и про­верим работос­пособ­ность PoC.  

Same Origin Policy

SOP (Same Origin Policy) — это полити­ка безопас­ности бра­узе­ра, которая кон­тро­лиру­ет вза­имо­дей­ствие меж­ду сай­тами. Она нуж­на для пре­дот­вра­щения кра­жи дан­ных поль­зовате­ля вре­донос­ным скрип­том.

До внед­рения SOP, дан­ные кра­ли так:

Проб­лема в том, что ког­да бра­узер отправ­ляет HTTP-зап­рос из одно­го источни­ка в дру­гой, cookie-фай­лы, отно­сящи­еся к дру­гому домену, тоже отправ­ляют­ся в зап­росе. Это зна­чит, что ответ будет сге­нери­рован в рам­ках сеан­са поль­зовате­ля и будет вклю­чать в себя дос­тупные толь­ко ему дан­ные. Что­бы пре­дот­вра­тить такое поведе­ние и сущес­тву­ет SOP.

Меж­сай­товые вза­имо­дей­ствия обыч­но делят на три катего­рии:

В качес­тве иллюс­тра­ции отпра­вим нес­коль­ко зап­росов со стра­ницы http://discovery-lab.su/index.html. Реак­ция SOP при­веде­на в таб­лице ниже.

А вот схе­ма, показы­вающая, из чего сос­тоит заголо­вок Origin.

Cross-Origin Resource Sharing (CORS)

Рань­ше сай­там тре­бова­лось вза­имо­дей­ство­вать друг с дру­гом, но SOP бло­киро­вала мно­жес­тво таких зап­росов. Тог­да люди при­дума­ли механизм CORS (Cross-Origin Resource Sharing), который пред­назна­чал­ся для смяг­чения полити­ки SOP.

Вот чуть более под­робное опи­сание из справ­ки Mozilla:

Те­перь давай раз­берем­ся с дву­мя заголов­ками, на которые пред­сто­ит чаще все­го обра­щать вни­мание: Access-Control-Allow-Origin и Access-Control-Allow-Credentials.

Access-Control-Allow-Origin

За­голо­вок отве­та Access-Control-Allow-Origin показы­вает, с какого источни­ка может быть дос­тупен ответ сер­вера.

Воз­можные зна­чения:

Access-Control-Allow-Credentials

В зависи­мос­ти от заголов­ков, меж­сай­товые зап­росы могут быть переда­ны без куки или заголов­ка авто­риза­ции. Впро­чем, если задана нас­трой­ка CORS Access-Control-Allow-Credentials: true, то сер­вер может раз­решить чте­ние отве­та, ког­да переда­ются куки или заголо­вок авто­риза­ции.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *