Код 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
  1. Разбивайте строку на инструкцию и аргументы через split(None, 1).
  2. Для тега берите последний сегмент после /.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.