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/. Они могут содержать регулярные выражения, проверки наличия файлов и т. п. Таким образом можно адаптировать сканер под свои требования безопасности.