Код Middle Облако и контейнеры обновлено
Линтер безопасности Dockerfile
Условие
Напишите audit(dockerfile), которая возвращает отсортированный список уникальных кодов проблем. Инструкции регистронезависимы, строки-комментарии (#) и пустые строки пропускаются, переносы строк через \ не встречаются.
latest: вFROMобраз без тега или с тегомlatest. Тег ищется в последнем сегменте пути после/(вregistry:5000/appдвоеточие относится к порту, тега нет).FROM scratchи образ с digest (@sha256:) не считаются. СуффиксAS имяигнорируется.root: нет ни одной инструкцииUSERили последняяUSERравнаrootили0.add_remote:ADD, источник которого начинается сhttp://илиhttps://.secret_env:ENVилиARG, имя переменной которой содержитPASSWORD,SECRET,TOKENилиAPI_KEY(без учёта регистра). Имя это первое слово после инструкции до=или пробела.curl_pipe:RUN, в котором естьcurlилиwgetи конвейер вshилиbash(| sh,|bash).
Примеры
audit("FROM python:3.13-slim\nUSER 10001\nCMD [\"python\"]") // []
audit("FROM python\nCMD [\"python\"]") // ["latest", "root"]
audit("FROM node:latest AS build\nFROM gcr.io/distroless/nodejs22-debian12:nonroot\nUSER nonroot") // ["latest"]
Как подойти
Подсказки: 2
- Разбивайте строку на инструкцию и аргументы через
split(None, 1). - Для тега берите последний сегмент после
/.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.