10 клас — програма модуля

Study.UA · IT Skills · Cloud Services & Cyber Security · 16 уроків · групи 10A, 10B, 10C
Один урок на тиждень. Нижче — що саме відбувається на кожному занятті, чого ти навчишся і що в тебе залишиться після нього. Уроки йдуть по порядку: кожен спирається на попередній.
01

Операційні системи, Linux і твій сервер

Ти отримуєш власний акаунт на спільному навчальному сервері, де працюють три класи — 63 учні та вчитель. Підключаєшся по SSH, міняєш виданий пароль і створюєш чотири робочі теки. Заразом розбираєш, навіщо Linux розділяє користувачів і що означає кожен символ у рядку ls -l.

Після уроку ти

  • вмієш заходити на сервер зі свого комп'ютера й міняти виданий пароль командою passwd
  • вмієш трьома командами — whoami, id, who — дізнатися, хто ти на цій машині і хто на ній ще працює
  • вмієш читати рядок ls -l: чий це файл, яка група і кому що з ним можна
  • вмієш скласти свої чотири теки й розрізняти, яку з них бачить увесь інтернет, а яку тільки ти
  • вмієш знайти командою top процес, через який сервер гальмує в усього класу
Залишається в тебе: Акаунт на сервері зі зміненим паролем, чотири теки www/ upload/ data/ notes/, сторінка index.html у ~/www/, що відкривається за твоєю адресою, і файли whoami.md та rules.md у ~/notes/.
SSH і passwd whoami, id, who права rwx і читання ls -l top і спільні ресурси VPS
Відкрити урок 01
02

AI-книга і права доступу: публікація на власному сабдомені

Ти пишеш із локальною моделлю книгу з трьох розділів і викладаєш її на свій сабдомен: читати може будь-хто, правити — тільки ти. Друга половина уроку про права доступу: переводиш rwxr-xr-x у 755 і назад, ставиш 755 на теки і 644 на файли. Учитель показує з акаунта attacker, що робить із твоєю текою запис 777.

Після уроку ти

  • вмієш складати промпт так, щоб модель видала потрібний розділ з першого разу
  • вмієш зверстати книгу з чотирьох сторінок і викласти її на свій сабдомен
  • вмієш читати рядок ls -l: чий файл, яка група, хто що з ним може
  • вмієш перекладати rwxr-xr-x у 755 і назад в умі
  • вмієш ставити 755 на теки, 644 на файли й перевіряти себе командою find
Залишається в тебе: Тека ~/www/book/ на твоєму сабдомені: index.html зі змістом, три розділи ch1.html — ch3.html по ≥250 слів, маніфест book.json, журнал NOTES.md та img-credits.md; права 755 на теки, 644 на файли, 700 на ~/.ssh.
chmod і вісімковий запис 755 / 644 шлях запиту DNS → nginx → файл у ~/www/ промпт як технічне завдання find для аудиту прав
Відкрити урок 02
03

Вебхук і секрет у .env: форма стукає до твого сервера

Досі твій сайт лише віддавав сторінки — сьогодні він уперше починає приймати дані. Google-форма через Apps Script сама надсилає POST на твою адресу, а приймач inbox.php перевіряє токен і відповідає кодом 200, 401, 403 або 405. Токен ти кладеш у ~/.env з правами 600, а самі анкети — у файл поза теками сайту.

Після уроку ти

  • вмієш зробити на своєму сайті адресу, куди чужий сервіс сам надсилає дані
  • вмієш відповідати на запит потрібним кодом: 200, 401, 403, 405
  • вмієш сховати токен у файл, який не побачить браузер
  • вмієш складати анкети у файл поза теками сайту, рядок за рядком
  • вмієш знаходити у власному коді рядки, які не можна нікуди віддавати
Залишається в тебе: Google-форма щонайменше з 4 полями і Apps Script, який шле POST після кожного надсилання; ~/www/api/inbox.php із README.md; ~/.env із правами 600; журнал ~/data/leads.jsonl поза веб-корінням, куди приймач дописує рядок.
вебхук проти опитування (polling) коди відповіді 200, 401, 403, 405 файл .env і openssl rand, права 600 формат JSONL і межа веб-кореня
Відкрити урок 03
04

Недовірений ввід: валідація, honeypot, екранування XSS

У твій приймач тепер летить те, що ти не контролюєш: чужі браузери, скрипти й боти. Ти додаєш серверну перевірку кожного поля, виводиш чуже ім'я з екрануванням, ставиш honeypot і ліміти на довжину, розмір тіла й частоту. Потім сам проводиш шість атак на власний обробник і записуєш очікуваний та фактичний код відповіді.

Після уроку ти

  • вмієш перевіряти кожне поле на сервері: чи прийшло, який тип, яка довжина
  • вмієш виводити чуже ім'я на сторінку так, щоб тег у ньому лишився текстом
  • вмієш ставити у формі приховане поле honeypot, яке заповнюють тільки боти
  • вмієш обмежувати довжину, розмір тіла й частоту запитів і відповідати 413, 422, 429
  • вмієш зламати власний обробник шістьма атаками й записати, що вийшло
Залишається в тебе: Оновлений ~/www/api/inbox.php із валідацією, honeypot і лімітами; сторінка ~/www/leads/index.php з останніми 10 записами й екрануванням при виводі; журнал власних атак ~/www/api/tests.md.
серверна валідація за білим списком XSS і екранування при виводі honeypot у формі коди 413, 422, 429
Відкрити урок 04
05

Датасет без слідів: PII, анонімізація, EXIF

Ти збираєш таблицю з відповідями однокласників і прибираєш із неї конкретних людей. На екрані видно, чому «ми ж прибрали прізвища» не працює: у таблиці на 24 людини 12 рядків усе одно вказують рівно на одну особу. Заразом ти чистиш EXIF своїх фото і записуєш кожне перетворення колонок у журнал.

Після уроку ти

  • вмієш подивитися на таблицю без прізвищ і сказати, кого з неї все одно впізнають
  • вмієш переробити колонки так, щоб рядок описував групу людей, а не одну людину
  • вмієш однією командою порахувати, скільки людей у найменшій групі твого файлу, і довести її до k ≥ 5
  • вмієш подивитися командою exiftool, що телефон дописав усередину твого фото, і стерти це
  • вмієш записати в окремий файл, яку колонку ти змінив і чому саме так
Залишається в тебе: Три текстові файли в ~/www/infographic/: очищений data.csv (≥10 рядків, ≥3 колонки), credits.md і anonymize-log.md з трьома перетвореннями. Сирий raw.csv і фото лишаються на твоєму комп'ютері.
персональні дані і квазіідентифікатори k-анонімність, правило п'яти exiftool -all= узагальнення й агрегація колонок
Відкрити урок 05
06

Чесна інфографіка: доступність, чужий код і SRI

Чистий data.csv з минулого уроку стає інфографікою: діаграми малює твій власний chart.js, а поруч стоїть таблиця з тими самими числами. Ти перевіряєш палітру очима людини, яка не розрізняє червоне й зелене, і підписуєш діаграму джерелом, датою і розміром вибірки. Третя частина уроку — чужий код: що дає авторові бібліотеки один рядок script з чужого сервера і як прив'язати цей файл атрибутом integrity.

Після уроку ти

  • вмієш написати до діаграми текст, який передає висновок, а не форму картинки
  • вмієш покласти поруч із діаграмою таблицю з тими самими числами
  • вмієш перевірити свої кольори очима людини, яка не бачить різниці червоного й зеленого
  • вмієш підписати діаграму так, щоб їй вірили: джерело, дата, скільки людей опитано
  • вмієш прив'язати чужий скрипт до одного точного файлу через integrity і пояснити навіщо
Залишається в тебе: Сторінка ~/www/infographic/index.html із ≥2 діаграмами, таблицею-дублікатом, підписом із джерелом і висновком ≥120 слів; власний chart.js, який читає data.csv і малює SVG; доповнений credits.md із розділом про зовнішні залежності.
SRI і атрибут integrity атака на ланцюг постачання коду колір не єдиний носій сенсу, контраст побудова SVG-діаграми з CSV
Відкрити урок 06
07

AI-медіа: промпт, вага файлів, маніфест походження media.json

Ти генеруєш трек на 30—90 секунд і відеофрагмент на 10—30 секунд — і жоден із цих файлів не потрапляє на сервер. Туди їде текст: сторінка-опис, транскрипт і маніфест походження media.json з полями tool, model, prompt, license, consent, duration_sec, size_mb. Вагу файлу ти рахуєш із тривалості й бітрейту, а потім звіряєш розрахунок командою ffprobe.

Після уроку ти

  • вмієш писати запит до генератора так, щоб той самий результат вийшов і завтра
  • вмієш порахувати вагу файлу з його тривалості й перевірити розрахунок командою ffprobe
  • вмієш вести поруч із роботою текстовий файл, який доводить, що це зробив ти
  • вмієш розібратися, який чужий матеріал брати можна, а який ні
  • вмієш описати відео словами так, щоб сторінка була зрозуміла без самого відео
Залишається в тебе: Тека ~/www/media/ з трьома текстовими файлами: index.html з описами, тривалостями й підписами, media.json з полями походження для кожного твору і transcript.md. Самі .mp3 і .mp4 лишаються в ~/media-local/ на твоєму комп'ютері.
маніфест походження media.json бітрейт і розрахунок ваги файлу ffprobe C2PA і Content Credentials
Відкрити урок 07
08

Deepfake, згода на образ і захист ресурсів

Урок веде дві лінії. Перша — чий образ і голос ти маєш право використати: статті 307 і 308 Цивільного кодексу, бланк згоди і кодове слово, яке працює навіть при ідеально схожому голосі в телефоні. Друга — твій сервер як чужий ресурс: ти забороняєш hotlink перевіркою заголовка Referer, звіряєш сигнатуру файлу з його розширенням і ставиш ліміт розміру завантаження з кодом 413.

Після уроку ти

  • вмієш сказати, що вміє підробити звичайний застосунок, а що йому поки не дається
  • вмієш домовитися з людиною, перш ніж зняти її на відео й викласти запис
  • вмієш завести вдома кодове слово, яке працює навіть при схожому голосі
  • вмієш заборонити чужим сайтам вантажити картинки просто з твого сервера
  • вмієш перевірити, що всередині файлу справді те, що написано в його назві
Залишається в тебе: Чотири файли в ~/www/media/: consent.md з правилами й бланком згоди, trust-protocol.md з кодовим словом і правилом зворотного дзвінка, доповнений media.json із заповненим полем consent і конфіг захисту від hotlink (.htaccess або ~/conf/media.conf).
deepfake і межі розпізнавання на око hotlink і заголовок Referer сигнатура файлу проти розширення, код 413 статті 307 і 308 ЦК України
Відкрити урок 08
09

Скрипт звіту report.sh: агрегація даних і дашборд

У ~/data/leads.jsonl уже лежать справжні заявки з твоєї форми. Ти пишеш скрипт ~/bin/report.sh, який читає цей приватний файл з іменами й адресами, а віддає публічний report.json із самими числами. Межу між приватним і публічним сьогодні проводиш ти сам: кожен зайвий ключ у цьому JSON бачить будь-хто у світі.

Після уроку ти

  • вмієш рахувати заявки просто в терміналі: скільки всього і скільки з кожного класу
  • вмієш написати скрипт, який збирає ці числа у файл report.json
  • вмієш прибирати зі звіту імена й адреси, щоб назовні пішли самі цифри
  • вмієш ховати надто малі групи, щоб «четверо з 10C» не вказувало на конкретну людину
  • вмієш роздати права так, щоб звіт бачили всі, а вихідні дані — тільки ти
Залишається в тебе: Скрипт ~/bin/report.sh із правами 700, сторінка-дашборд ~/www/dash/index.html і згенерований самим скриптом ~/www/dash/report.json з правами 644. Файл ~/data/leads.jsonl лишається з правами 600 поза ~/www/.
jq, sort | uniq -c, awk для JSONL set -euo pipefail атомарний запис через тимчасовий файл і mv мінімізація й агрегація даних, ідемпотентність
Відкрити урок 09
10

cron, логи і принцип найменших привілеїв

report.sh переїжджає в розклад cron і з цієї миті працює без тебе. Ти видаєш йому рівно потрібні права замість chmod 777, береш для зовнішнього сервісу токен тільки на читання з терміном дії й пишеш у лог рядок, з якого видно подію, але немає жодного чужого імені. Наприкінці налаштовуєш ротацію логу і код завершення, за яким видно падіння.

Після уроку ти

  • вмієш видавати скрипту рівно ті права, які йому потрібні, замість chmod 777
  • вмієш брати для скрипта ключ, яким можна лише читати, і ставити йому термін дії
  • вмієш писати в лог рядок, з якого видно, що сталося, — і жодного чужого імені
  • вмієш ховати секрет у файл ~/.env, а не в рядок розкладу
  • вмієш стежити, щоб лог не ріс вічно, і повертати чесний код виходу, коли скрипт упав
Залишається в тебе: Рядок у crontab -e, який сам запускає ~/bin/report.sh за розкладом; приватна тека ~/logs/ з правами 700 і файлом report-РРРР-ММ.log з правами 600; ~/www/dash/README.md із розкладом людською мовою і планом реагування на витік токена.
crontab і п'ять полів розкладу принцип найменших привілеїв токен зі скоупом read-only і ротація коди завершення і ротація логів
Відкрити урок 10
11

Автоматизація Zapier/IFTTT і вхід за SSH-ключем

Ти генеруєш пару ключів ed25519 у себе на комп'ютері, кладеш публічну частину в ~/.ssh/authorized_keys і заходиш на сервер без пароля — приватний ключ машину не залишає. Друга лінія уроку: збираєш у Zapier або IFTTT сценарій «тригер → фільтр → дія», який стукає у твій api/hook.php, і розбираєш екран згоди сервісу. Приймач сьогодні приймає подію від будь-кого — це навмисно, і це закриє урок 12.

Після уроку ти

  • вмієш заходити на сервер без пароля — по двох файлах, які створив сам
  • вмієш читати журнал входів і бачити, хто і чим стукав у твій сервер уночі
  • вмієш прибрати загублений ключ одним рядком, не міняючи нічого іншого
  • вмієш зібрати сценарій, який щось робить сам, коли настане подія
  • вмієш подивитися на екран згоди сервісу й назвати, які саме скоупи ти віддаєш
Залишається в тебе: Пара ed25519 (приватний ключ тільки на твоєму комп'ютері), ~/.ssh із правами 700 і authorized_keys із 600, вхід без пароля. На сервері — api/hook.php, сторінка events/index.php із часом останньої події та api/scenario.md; журнал ~/data/events.jsonl поза ~/www.
ssh-keygen ed25519 і authorized_keys права 700 на ~/.ssh і 600 на файл ключа журнал входів: last, auth.log OAuth-скоупи і схема «тригер → фільтр → дія»
Відкрити урок 11
12

Підпис вебхука HMAC, мітка часу і захист від replay

Учитель кладе чужий запис у твій events.jsonl, знаючи лише адресу ендпойнта — і відрізнити його від справжнього ти не зможеш. Ти закриваєш цю вразливість підписом: hash_hmac рахує HMAC від тіла запиту, а hash_equals порівнює підписи за сталий час. Далі додаєш вікно 300 секунд для X-Timestamp і сховище nonce, щоб той самий запит не пройшов удруге.

Після уроку ти

  • вмієш підписувати запит так, щоб підробити його не вийшло навіть з адресою на руках
  • вмієш відрізнити чужий запис у своєму журналі від власного
  • вмієш відхилити запит, який хтось перехопив учора й надсилає сьогодні
  • вмієш не приймати той самий запит удруге, навіть якщо він прийшов за секунду
  • вмієш описати свою схему так, щоб чужа людина надіслала тобі подію без твоїх підказок
Залишається в тебе: Оновлений ~/www/api/hook.php із перевіркою X-Signature, X-Timestamp і nonce у правильному порядку, та api/security.md з описом схеми для чужої команди. Секрет HOOK_SECRET у ~/.env, тека ~/data/nonces/ — обидва поза веб-корінням.
HMAC і hash_hmac порівняння за сталий час hash_equals replay-атака, вікно 300 секунд і nonce коди відповіді 400, 401, 409
Відкрити урок 12
13

Чат-бот із серверним проксі: ключ ніколи не на фронтенді

За три кліки в панелі «Мережа» ти дістаєш ключ із навчального бота, у якому він лежить просто в chat.js — і робиш свого інакше. Ключ читає api/chat.php з файлу ~/.env уже на сервері, а браузер знає тільки адресу /api/chat.php. Заразом пишеш system.md із роллю, межами і формулою відмови бота, ставиш серверні перевірки й налаштовуєш .gitignore.

Після уроку ти

  • вмієш знайти чужий ключ у чужому боті за три кліки, без жодного зламу
  • вмієш написати сторінку чату, яка звертається тільки до твого власного сервера
  • вмієш тримати ключ у файлі, який браузер не бачить і не може попросити
  • вмієш поставити на сервері обмеження, щоб чужий скрипт не з'їв твою квоту за ніч
  • вмієш порахувати, скільки коштує одна репліка бота і скільки — місяць роботи
Залишається в тебе: Робочий бот на сабдомені: bot/index.html, bot/chat.js, bot/system.md і api/chat.php із перевірками методу, типу вмісту, довжини й частоти. Ключ лише в ~/.env з правами 600; .gitignore налаштовано, і ключа немає ані в робочій теці, ані в історії комітів.
серверний проксі і межа довіри ~/.env з правами 600 системний промпт у system.md .gitignore і перевірка git log --all -p
Відкрити урок 13
14

Prompt injection, rate limit і секрет в історії git

Твій бот працює, але передає моделі будь-який підкинутий текст як інструкцію і не має обмежень. Ти ставиш межу «системний промпт / дані користувача», фільтр виходу з канаркою, ліміт довжини 400 символів із кодом 413 і ліміт частоти 10 запитів за 60 секунд із кодом 429. Заразом ганяєш сканер по ~/www і по історії git — і якщо ключ знайдено, першою дією відкликаєш його.

Після уроку ти

  • вмієш перевіряти свій репозиторій на ключі — не тільки у файлах, а й в історії комітів
  • вмієш відкликати ключ, що втік, і поставити новий за десять хвилин
  • вмієш ставити боту межу: не більше 10 запитів за хвилину з однієї адреси
  • вмієш відповідати на завеликий запит правильним кодом, а не помилкою сервера
  • вмієш зламати чужого бота підкинутою командою — і залатати після цього свого
Залишається в тебе: Оновлений api/chat.php із лімітами й фільтром виходу, bot/system.md, журнал восьми атак bot/injection-tests.md і bot/incident.md із порядком дій при витоку ключа. Лічильник запитів сервер пише в ~/data/, поза ~/www.
пряма й непряма prompt injection rate limit, код 429 і заголовок Retry-After ліміт довжини і код 413 канарка у фільтрі виходу, ротація ключа
Відкрити урок 14
15

Збірка командного продукту і гігієна вебформ

Команда зводить п'ять окремих робіт модуля — книгу, дашборд, опис AI-медіа, бота і журнал автоматизації — в один сайт зі спільною навігацією на team-N.nstekh.uk. Далі всі форми проходять однакову послідовність із шести перевірок: CSRF-токен, honeypot, серверна валідація, екранування, ліміти довжини й частоти. Наприкінці команда проганяє чек-лист готовності з 15 пунктів і закриває всі блокуючі.

Після уроку ти

  • вмієш зводити п'ять окремих сторінок в один сайт з однією навігацією
  • вмієш написати README.md так, щоб чужа людина знайшла потрібне без вас
  • вмієш пояснити, як чужий сайт може надіслати запит від імені твого відвідувача
  • вмієш ставити у форму приховане поле, без якого сервер запит не прийме
  • вмієш прогнати форму через шість перевірок і побачити на екрані код відмови
Залишається в тебе: Командний продукт на team-N.nstekh.uk: одна головна сторінка й однакова навігація на всіх п'яти компонентах, README.md з архітектурою і таблицею ролей, SECURITY.md і PHP-обробники форм із CSRF-токеном та шістьма фільтрами.
CSRF і токен у формі звірка токена через hash_equals спільна навігація з абсолютними шляхами README.md і SECURITY.md
Відкрити урок 15
16

Крос-аудит red/blue team, виправлення і захист

Останній урок модуля: кожна група перевіряє продукт сусідньої за списком із 12 пунктів і сама отримує звіт про свої вразливості. Спершу підписуються правила аудиту — тільки призначена ціль, тільки чек-лист, нічого не псувати; вихід за межі анулює звіт усієї команди. Далі 30 хвилин на виправлення, повторний прогін audit.sh і тривилинний захист продукту перед класом.

Після уроку ти

  • вмієш перевіряти чужий сайт за списком із 12 пунктів, не виходячи за межі дозволеного
  • вмієш записати знахідку так, щоб чужа команда відтворила її без тебе
  • вмієш відрізнити вразливість, яку лагодять першою, від тієї, що почекає
  • вмієш прийняти звіт про свої помилки й закрити їх за півгодини
  • вмієш захистити свій продукт перед класом за три хвилини
Залишається в тебе: Підписані audit-rules.md, звіт audit-report.json, де до кожної знахідки додано відтворюваний доказ, і FIXES.md із часом подання та часом закриття кожної знахідки; повторний прогін audit.sh із зеленим чек-листом і захист продукту.
red team і blue team чек-лист із 12 перевірок і фіксація доказу відповідальне розкриття стаття 361 Кримінального кодексу України
Відкрити урок 16
Твій сайт: /s/твій-логін/ · вхід на сервер: ssh твій-логін@91.219.61.4 · зміна пароля: passwd