Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created January 18, 2026 19:55
Show Gist options
  • Select an option

  • Save sunmeat/e67e7bb1934a6019cb4d86a8984df733 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/e67e7bb1934a6019cb4d86a8984df733 to your computer and use it in GitHub Desktop.
ДЗ на захист від вразливостей

Модифікувати веб-додаток «Музичний портал» наступним чином:

Реалізувати клієнтський веб-інтерфейс адміністратора порталу як односторінковий веб-додаток (Single Page Application — SPA).

Для взаємодії веб-клієнта з веб-сервісом у рамках REST-архітектури використовувати технологію AJAX та методи протоколу HTTP (GET, POST, PUT, DELETE).

Важливо, щоб:

  • веб-клієнт (SPA) та веб-сервіс (backend API) розміщувалися на різних доменах (або субдоменах / різних портах);
  • для дозволу AJAX-запитів між різними джерелами (cross-origin) використовувати механізм CORS (Cross-Origin Resource Sharing).

Додаткові вимоги до безпеки (обов’язково реалізувати захист від однієї вразливості на вибір):

  • Broken Authentication
  • Broken Access Control / BOLA / IDOR
  • Cryptographic Failures
  • SQL Injection
  • Security Misconfiguration
  • Vulnerable and Outdated Components
  • Server-Side Request Forgery (SSRF)
  • Cross-Site Scripting (XSS)
  • Cross-Site Request Forgery (CSRF)
  • Unrestricted Resource Consumption

Наприклад, якщо обрана вразливість Broken Access Control / BOLA / IDOR, то необхідно реалізувати:

  • Усі операції адміністратора (перегляд, створення, редагування, видалення треків, альбомів, користувачів, плейлистів тощо) повинні проходити перевірку прав доступу на сервері.
  • Заборонено покладатися лише на прихованість ID в URL або в тілі запиту.
  • Кожний запит, що змінює або читає об’єкт за ідентифікатором (наприклад /api/tracks/12345, /api/users/567), повинен перевіряти:
    • чи належить цей об’єкт поточному автентифікованому адміністратору (якщо це його власні дані),
    • або чи має користувач глобальну роль адміністратора (admin).
  • У разі спроби доступу до чужого об’єкта (наприклад, адміністратор №5 намагається змінити трек №12345, який належить адміністратору №2 або звичайному користувачу) — повертати 403 Forbidden або 404 Not Found (рекомендується 403).
  • Не повертати в помилках інформацію, яка може допомогти атакуючому (наприклад, «цей трек належить іншому користувачу»).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment