[hate] CORS

Viktor Love
2 min readAug 12, 2020

--

Небольшое интро

Для тех, кто незнаком с CORS. В браузерах есть механизм, ограничивающий AJAX-запросы с других доменов. Называется он same-origin policy. А CORS — это единственный способ это блядство обойти. Работает он следующим блядским образом:

  1. Браузер посылает preflight request (OPTIONS)
  2. Сервер посылает специальный ответ с засетапленными хидерами, которые указают на то, что запрос безопасен
  3. При успехе сверки хидеров, браузер посылает нормальный запрос. Иначе браузер посылает юзер-код нахуй.

API и SPA

Достаточно типичной практикой является разделение API и статики. Благодаря блядскому CORS, мы испытываем двойной latency на ровном месте. Для каждого запроса.

Но у нас вроде есть кеширование preflight. Но на практике оно бесполезно и не работает. Почему? Потому что большая часть запросов у вас будут “сложные” и на них кеширование не распространяется.

no-cors

Как вы думаете, как работает в браузере режим no-cors? Зацените ответ на so. Итак, no-cors позволяет послать запрос, но не позволяет читать ответ сервера.

Т.е. заддосить чужой сервер мы можем, но прочитать ответ — нет. Охуенное секьюрити, да?

обход cors

Реализуется тривиальным прокси-сервером. Потому что same-origin policy — это клиентская политика, а не серверная.

нахуя это все

В 1995 появилась same-origin policy, которая запрещает слать запросы на чужие домены.

Почему же? Потому что при посылке запроса на домен A отправляются уже существующие куки с домена A. В те лохматые годы куки были самым массовым способом хранения кредов. В итоге, можно было сделать сайтик, которые шлет запрос вида “а отдайте мне, пожалуйста, все деньги это пользователя”.

В нынешние годы JWT + хидер Authorization захватил мир. И теперь ебланство ситуации просматривается на отлично. Вполне достаточно было вырубить отправку кук по дефолту; а если нужны куки, то вот вам CORS.

вот тут еще пишут, что некоторые ебланы используют аутентификацию на основе IP.

в чем проблема

Из-за кучки тупорылых пидарасов у половины интернета теперь проблемы на ровном месте.

Но вот особенно бесит следующее. Вы можете написать SPA и залить для публичного использования на бесплатный хостинг. Но вот использовать чужие АПИ вы бесплатно не можете. Вам нужно искать/поднимать ебучее прокси.

--

--

Viktor Love
Viktor Love

Written by Viktor Love

Software Engineer from Ukraine. TypeScript, React, C#, Angular.

No responses yet