nmk

Лабораторна робота №18 (2 години)

Тема: Фіналізація MVP-проєкту та його підготовка до здачі. Тестування проєкту (QA), перевірка умов доступу (доступ до завдань лише після логіну, відображення лише власних завдань поточного користувача), демонстрація та деплой на хостинг.

Мета: Навчитися проводити фінальні аудити безпеки та бізнес-логіки системи (Data Isolation), виконати тестування продукту перед здачею замовнику (або викладачу в даному випадку), та (за бажанням) навчитись деплоїти проєкт в інтернет на реальний сервер.

Технологічний стек: Manual QA, CPanel/Hostinger/Vercel (залежно від вибору платформи розгортання), остаточне тестування PHP.

Завдання

  1. Перевірити коректність ідентифікатора у запитах БД (Ізоляція даних): користувач повинен бачити та видаляти виключно свої завдання.
  2. Провести “Чеклист” тестування сайту на наявність багів і вразливостей (самоперевірка).
  3. Очистити файли від залишків системної відладки (видалення розкоментованих var_dump() і print_r()).
  4. (Опціонально) Завантажити MVP “Менеджера завдань” на безплатний хостинг та перетворити його на публічний сайт. Додати дамп бази даних та налаштувати конфіг db.php для реального MySQL-серверу на цьому хостингу.

Хід виконання роботи

Крок 1. Ізоляція даних (Privacy and Access Control)

Наразі, якщо зареєструвати двох користувачів, вони обидва бачать одні й ті самі завдання. Це є критичним багом (Broken Access Control) для будь-якого сайту! У $_SESSION['user_id'] ми зберегли ID нашого користувача. Змініть SQL-запит у класі TaskController на виведення всіх завдань: SELECT * FROM tasks WHERE user_id = :uid. Зв’яжіть :uid із значенням із $_SESSION['user_id']. Те саме зробіть у запиті на видалення (DELETE... WHERE id= :id AND user_id = :uid) та на створення (поле user_id повинно братися зСессії, а не з випадкового числа!).

Крок 2. Самотестування функцій проєкту

Зареєструйте на сайті користувача userA@test.com і спробуйте:

  1. Залогінитись.
  2. Створити три завдання.
  3. Відкрити інший браузер (чи приватну вкладку). Зареєструвати userB@test.com.
  4. Переконатися, що він бачить ПОРОЖНІЙ список.
  5. Спробувати залогіненим UserB вбити в адресний рядок браузера адрес видалення: http://localhost/.../delete.php?id=1 (ID завдання користувача A). Якщо завдання यूजर A не видалилось — ваша система безпеки з Кроку 1 працює ідеально.

Крок 3. Рефакторинг та очищення перед деплоєм

Мертві фрагменти коду та var_dump — “поганий тон”. Перегляньте усі *.php файли або використовуйте глобальний пошук у вашій IDE (Ctrl(Cmd) + Shift + F). Знайдіть всі слова “dump” або “die” або “print” (залишені для відлагодження) та видаліть їх. Також видаліть непотрібнi чи тестові css класи або файли, які залишилися в папці та не використовуються.

Крок 4 (За бажанням, додаткові бали). Розгортання (Деплой)

Ви можете залити проєкт на безкоштовні хостинги для PHP:

  1. Знайдіть безплатний FTP/PHP/MySQL хостинг (наприклад, 000webhost, infinityfree і т.п.).
  2. Перейдіть у панель керування базами даних хостингу (зазвичай phpMyAdmin там теж є) та імпортуйте свій збережений локально раніше database_dump.sql (або просто створіть такі ж таблиці з нуля).
  3. Через FTP-клієнт FileZilla завантажте всі ваші PHP-файли всередину серверної папки public_html.
  4. Внесіть зміни у серверний файл db.php: замість локального логіна-пароля (root/пусто) вставте ті реквізити бази даних, які вам надав хостинг у контрольній панелі.

Контрольні запитання

  1. Поясніть сутність “Broken Access Control” (Порушення управління доступом, згідно класифікації вразливостей OWASP Top 10) на прикладі вашого сайту. Як додавання умови AND user_id = :uid у запити WHERE захищає від цього?
  2. Яким шляхом ми можемо зробити так, щоб користувач міг видаляти лише власне завдання, навіть якщо він випадково чи зумисне змінить переданий в URL id?
  3. Чому залишати var_dump() і відображення системних помилок (display_errors = On) для звичайних користувачів у Production-випуску категорично не можна з міркувань безпеки?
  4. Що таке протокол FTP, як він розшифровується і чи використовується він дотепер під час публікацій складних масштабних сучасних сервісів, чи його замінили методи Continuous Deployment (Гіт-деплой)?
  5. Яку базу даних потрібно експортувати під час розгортання проєкту на інший (реальний) сервер? Який формат файлу використовується для цього дампу? Чи потрібно переносити інформацію, чи створити лише “схему” (Schema)?

Вимоги до звіту

  1. У файл lab18.md надіслати підсумковий звіт за весь семестр, перелічивши технології та концепції, які ви використали.
  2. Прикласти фрагмент коду безпечного обробника видалення (delete.php), який демонструє ізоляцію за user_id.
  3. Зробити 2-3 скриншоти готового проєкту. Якщо здійснено розгортання (деплой), додати обов’язково публічне веб-посилання на ваш працюючий хостинг!
  4. Відправити посилання на Git-репозиторій. Це остання публікація коду.
  5. Надати відповіді на контрольні запитання.