Ward: сканер безопасности для Laravel

Ward - это новый инструмент-сканер безопасности для приложений на Laravel, разработанный Йассином Эль Джакани. В отличие от простых средств, которые ищут шаблоны опасного кода методом grep, Ward анализирует структуру вашего Laravel-проекта и выполняет контекстные проверки безопасности.

Laravel обладает многими встроенными мерами защиты (например, CSRF-защита, шифрование cookies и т. д.), но неправильные настройки, слабые пароли, пропущенные проверки авторизации или уязвимые зависимости всё ещё могут оставаться незамеченными. Ward помогает разработчикам находить такие проблемы автоматически.

Что такое Ward и как он работает

Ward - это командный инструмент, написанный на языке Go, специально ориентированный на проекты Laravel. Он сначала анализирует структуру вашего приложения (маршруты, модели, контроллеры, middleware, Blade-шаблоны, конфигурационные файлы, переменные окружения и зависимости) а затем запускает набор правил и проверок на основе этого контекста.

Инструмент поставляется в виде двоичного файла Go, что позволяет устанавливать его на любую машину разработчика или CI/CD-систему.

Установка и первый запуск

Чтобы начать использовать Ward, убедитесь, что у вас установлен Go. Затем выполните:

go install github.com/eljakani/ward@latest

Добавьте директорию Go в ваш PATH:

export PATH="$PATH:$(go env GOPATH)/bin"

После установки запустите:

ward init

Это создаст в ~/.ward/ конфигурационный файл, правила и каталоги для отчетов и истории сканирования.

Сканирование проекта

Вы можете указать как локальную директорию проекта, так и удалённый репозиторий Git:

ward scan /path/to/laravel-project

или

ward scan https://github.com/user/laravel-project.git

При запуске в терминале Ward показывает текстовый интерфейс с прогрессом и данными о найденных проблемах. После завершения вы увидите таблицу с результатами, сгруппированную по категориям, степеням риска и описаниям.

Что именно проверяет Ward

Ward включает четыре независимых движка сканирования, которые оценивают разные аспекты безопасности проекта:

env-сканер

Проверяет файл .env на типичные ошибки, такие как:

  • включён APP_DEBUG в продакшене,

  • отсутствует или слабый APP_KEY,

  • секреты оставлены в .env.example.

config-сканер

Проверяет все конфигурационные файлы под config/*.php на предмет:

  • жестко закодированных учетных данных,

  • отсутствующих настроек безопасности,

  • конфигураций с большими разрешёнными CORS-origin и т. п.

dependency-сканер

Анализирует файл composer.lock и в реальном времени проверяет зависимости через базу уязвимостей OSV.dev, чтобы находить известные CVE-уязвимости в пакетах.

rules-сканер

Применяет более 42 правил безопасности, касающихся:

  • жестко вшитых секретов,

  • SQL- и командной инъекции,

  • XSS (неэкранированного вывода в Blade),

  • слабых криптографических паттернов,

  • пропущенных CSRF/лимитов запросов,

  • небезопасных контроллеров и т. п.

Вывод и форматы отчётов

Ward позволяет настраивать формат вывода результатов через конфигурационный файл (~/.ward/config.yaml), включая:

  • JSON (для машинной обработки),

  • SARIF (для интеграции с IDE и GitHub Code Scanning),

  • HTML (визуальный отчёт),

  • Markdown (например, для комментариев в PR).

Интеграция в CI/CD

Ward может возвращать ненулевой код завершения, если в проекте найдены уязвимости выше заданного уровня серьёзности. Например:

ward scan . --output json --fail-on high

Это удобно для автоматической проверки безопасности при каждой сборке или pull-request’е.

Пример использования в GitHub Actions:

- name: Install Ward
  run: go install github.com/eljakani/ward@latest

- name: Run Ward
  run: ward init && ward scan . --output json

и можно добавить загрузку отчёта SARIF.

Работа с baseline

Чтобы признать уже существующие предупреждения известными и сосредоточиться только на новых, Ward поддерживает базовую линию сканирования:

ward scan . --output json --update-baseline .ward-baseline.json

В последующих запусках можно использовать базу для подавления старых предупреждений и провалить сборку только при появлении новых.

Расширяемость и кастомные правила

Вы можете добавлять свои собственные правила сканирования, помещая .yaml-файлы в директорию ~/.ward/rules/. Они могут содержать регулярные выражения, проверки наличия файлов и т. п. Таким образом можно адаптировать сканер под свои требования безопасности.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Как удалить Docker‑образы, контейнеры и тома: подробное руководство

Полное руководство по удалению Docker‑образов, контейнеров и томов. Включены подробные команды, примеры и советы по очистке Docker‑среды для освобождения места на диске.

Как загружать большие файлы в Laravel

Подробный практический гайд по загрузке больших файлов в Laravel с использованием разбиения на части и функцией возобновления. Объясняется, как организовать сервер и клиент для надёжной загрузки больших файлов.

Как работает time.sleep() в Python

Подробно разбираем функцию time.sleep() в Python: как она работает, где применяется и какие ограничения имеет. Рассмотрены практические примеры, использование в циклах, многопоточном и асинхронном коде.