Уязвимая версия
Задание 1Введение
Цель: Проверять версии зависимостей по диапазонам уязвимостей.
Напишите is_vulnerable(version, ranges). Версия — MAJOR.MINOR.PATCH. Диапазон — условия через пробел (>=, >, <=, <, =), все условия должны выполняться. Версия уязвима, если подходит под любой диапазон.
Задание 2Теория и инструменты
Базы уязвимостей (OSV, GitHub Advisory) описывают затронутые версии диапазонами.
Версии сравнивают покомпонентно как числа: 1.10.0 > 1.9.0, а строковое сравнение ошибается.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
is_vulnerable("1.4.2", ["\u003e=1.2.0 \u003c1.4.3"])
→ trueis_vulnerable("1.4.3", ["\u003e=1.2.0 \u003c1.4.3"])
→ falseЕщё 6 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Разберите версию в кортеж чисел.
- 2Для каждого условия диапазона определите оператор и сравните.
- 3Версия уязвима, если подходит хотя бы под один диапазон.
Подсказки — каждая до решения стоит −100 очков
Задание 4Как защититься
Подключите автоматическую проверку зависимостей (pip-audit, npm audit, Dependabot) в CI.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.