🔥 Content-Type и как его взламывают

Content-Type для новичка - просто техническое поле. Поставил application/json в Postman и забыл.

Но опытные ребята знают, пропускать его проверки = играть с огнем. Этот заголовок - первая линия обороны твоего API. И её часто просто нет.

Почему это важно? Представь: сервер ждёт JSON. Content-Type в запросе - text/plain. Что сделает большинство бэкендов? Спарсит тело как JSON и вернёт 200 OK.

Фреймворки (Express, Spring, Flask) по историческим причинам не проверяют заголовок - они смотрят на содержимое. Если тело парсится - ок.

И вот тут начинается веселье😚 Злоумышленник отправляет Content-Type: text/plain, а в теле - вредоносный JSON. Он обходит: 🔘Валидацию схемы (она привязана к application/json) 🔘Rate limiting по типу контента (запросы с text/plain легко прорутся и привет DDoS) 🔘Логирование (в логах text/plain, хотя атака - JSON-инъекция)

Content-Type - это не «поставить и забыть». API НЕЛЬЗЯ полагаться на автопарсинг фреймворка, нужно проверять заголовки на прикладном уровне.

Проверь сам: bash curl -X POST /api/users -H "Content-Type: text/plain" -d '{"role": "admin"}'

Если 200 OK - у тебя открытая дверь.

А ты этот заголовок тестишь?