Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 09 жовтня 2026

Порада з безпеки: як завантаження файлів може обійти захист від CSRF

Прийом файлів від користувачів завжди пов'язаний з ризиками. Про це йдеться в Security Tip #53 від Стівена Ріс-Картера зі Securing Laravel. Автор нагадує: завантажені файли можуть дуже легко допомогти обійти захист від CSRF і захист cookie.

Чому завантаження файлів небезпечні

Нa відміну від іншого користувацького вводу, вміст файлу зазвичай не можна повністю перевірити або жорстко обмежити, а потім безпечно зберегти в базі даних. Файли потрібно класти в папку на диску, і залежно від завдання вони часто мають бути доступні всьому світу.

Саме це і є головною проблемою: світова доступність.

Перше, про що думають розробники, - це завантаження .php-файлів і спроба отримати RCE. Це справді найбільший ризик, але не слід забувати і про .html, і навіть про .js-файли, а також про те, звідки вони доступні.

Обмежуйте типи файлів

Загальне правило - завжди обмежувати типи файлів, які дозволено завантажувати. Для цього автор радить валідацію завантажених файлів у Laravel: вона дуже надійна, тому варто перевіряти нею все.

Але що робити, якщо потрібно приймати широкий набір файлів або навіть саме .html?

У чому ризик HTML-файлів

Якщо зловмисник може завантажити HTML-файл, який браузер виконає як HTML, він зможе запустити JavaScript у браузері жертви. Залежно від області (scope), у якій виконується цей файл, він може отримати повний доступ до сесійних cookie та CSRF-токенів. Тоді CSRF- та XSS-атаки стають тривіальними, а застосунок - повністю беззахисним.

Порівняння варіантів розміщення файлів

Автор розглядає сценарій, коли основний застосунок працює на securinglaravel.com, а завантажені файли доступні для перегляду чи завантаження.

securinglaravel.com/downloads/upload.html

  • ❌ Файл напряму в межах основного домену.
  • ❌ Повний доступ до автентифікаційних cookie.
  • ❌ Повний доступ до CSRF-токенів.
  • ❌ .php-файли можуть виконуватися, що дає RCE у застосунку.

cdn.securinglaravel.com/upload.html

  • ❌ Пов'язаний з областю основного домену.
  • ❌ Перебуває в області «Same-Site» з основним доменом, тож обходить захист, який дають SameSite=Lax і SameSite=Strict.
  • ⚠️ CSRF-токени потенційно доступні, якщо піддомени входять в область дії cookie.
  • ⚠️ .php-файли можуть виконуватися, що дає повний доступ до всіх завантажених файлів і потенційно до всього застосунку.

securinglaravel.some-cdn-provider.com/upload.html

  • ✅ Незалежний домен поза областю основного.
  • ✅ Cookie заблоковані.
  • ✅ CSRF-токени отримати неможливо.
  • ✅ Будь-який пристойний CDN чи файлове сховище не дозволить виконувати серверні файли (наприклад, .php).

Висновок

Навіть якщо ви спеціально не дозволяєте завантажувати .html, автор наполегливо радить віддавати завантажені файли з повністю окремого домену. Це запобігає обходу CSRF і cookie-захисту, а якщо сервіс узагалі не підтримує виконання PHP-скриптів, то ви не ризикуєте, навіть коли хтось зуміє туди завантажити PHP-скрипт.

Усе зводиться до управління ризиками.

18

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Laravel AI SDK на практиці
Новини 09 жовтня 2026

Laravel AI SDK на практиці: агент, що стоїть за There There

Фрік Ван дер Гертен розповідає, як у Spatie побудували AI-шар хелпдеска There There на Laravel AI SDK: клас агента, інструменти з типізованою JSON-схемою та делегування роботи звичайним domain-діям.

9
Порядок middleware
Новини 07 жовтня 2026

Порядок авторизації та прив’язки моделей у Laravel: чому замість 403 приходить 404

Чому користувач без прав отримує 404 замість 403 на маршрутах із route model binding, як це пов’язано з пріоритетом middleware SubstituteBindings та Authorize і як це виправити за допомогою PermissionMiddleware.

17

Вакансії за темою

N-iX Нова
2 дні тому

Senior/ Lead PHP Engineer (with AI Skills) (#5828)

Розробка та підтримка backend-сервісів і API на PHP та Laravel з повним циклом володіння фічами від дизайну до моніторингу. Ключове завдання - інтеграція агентних AI-workflow (LLM-агенти, tool calling) у продукт і внутрішні інструменти, а також менторство інших інженерів. Вимоги: 6+ років PHP, 4+ роки з Laravel, досвід GenAI, знання MySQL/PostgreSQL, Docker та хмарних платформ, робота за часовим поясом EDT.

Full Stack Developer (middle+)

Full Stack розробник розвиватиме та підтримуватиме вебпродукти FinTech-компанії: доопрацьовуватиме backend і frontend, функціонал особистого кабінету клієнта, інтеграції через REST API з платіжними та ідентифікаційними сервісами. Ключовий стек: PHP, Laravel, Vue.js (Vue Router, Pinia або Vuex), MySQL/PostgreSQL, Docker, Git. Вимоги: понад 3 роки комерційного Full Stack досвіду, робота з наявним кодом, участь у code review та розборі інцидентів.

Bulls-media Нова
3 дні тому

Junior+ Full Stack Developer

Розробник PHP/Laravel для роботи на фулстеку: розробка та підтримка бекенду на PHP/Laravel і фронтенду на JavaScript/HTML/CSS. Основний стек: PHP, Laravel, MySQL, REST API, Git. Вимоги: 1+ років досвіду в веб-розробці, хороше знання PHP, базово-проміжна рівень Laravel, розуміння JavaScript, HTML/CSS, REST API та OOP. Менторство від досвідчених розробників, робота з реальними комерційними проєктами.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

28,224 v2.5.0 13 26

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,779 15.37.4 12