- ZAP cross-platform 2.17.0 + MCP-аддон mcp-alpha-0.0.1 на portable Temurin JRE 17 (bin/, gitignored) - Ward v0.4.1 собран portable Go 1.26.3 (bin/ward.exe); smoke app/ → 2 находки (APP_DEBUG/APP_ENV) - setup-доки docs/security/zap-setup.md + ward-setup.md - нормативный синк: Tooling v2.21 / CLAUDE.md v2.25 / PSR_v1 v3.21 / Pravila v1.38 - ADR-014 amended (Status/Decision/Consequences) + routing-off-phase v1.5 - gates GREEN: cross-ref + l1-watcher 0 drift / markdownlint / lychee / gitleaks Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.5 KiB
Ward (#70) — установка и использование
Узел A8: #70 — безопасность настроек Laravel (.env / config / заголовки / cookie / secrets / deps).
Источник (IS9-вет принят): Eljakani/ward (MIT, Go), заменил Enlightn (abandoned + без поддержки Laravel 13 — см. infosec-vet.md §ПЕРЕСМОТР #70).
Тип: CLI-сканер (Go-бинарь) — не MCP-сервер, не Composer dev-dep (как Nuclei #69 / gitleaks #8). Go-бинарь → не зависит от версии Laravel (проблема Enlightn снята).
Установка (native-Windows, портативно, без choco)
Готовых бинарей в релизе Ward нет — только go install. Go ставится портативно (zip, без choco), всё под bin/ (gitignored).
# 1. Portable Go (официальный zip, проверка SHA256)
$ProgressPreference='SilentlyContinue'
Invoke-WebRequest -Uri 'https://go.dev/dl/go1.26.3.windows-amd64.zip' -OutFile 'bin\_dl\go.zip' -UseBasicParsing
# ожидаемый SHA256: 20d2ceafb4ed41b96b879010927b28bc92a5be57a7c1801ce365a9ca51d3224a
Expand-Archive 'bin\_dl\go.zip' -DestinationPath 'bin\_runtimes' -Force # → bin\_runtimes\go\
# 2. Собрать Ward (локальные GOPATH/GOCACHE — всё остаётся под bin/)
$root=(Get-Location).Path
$env:GOROOT="$root\bin\_runtimes\go"; $env:GOPATH="$root\bin\_runtimes\gopath"; $env:GOCACHE="$root\bin\_runtimes\gocache"
$env:PATH="$env:GOROOT\bin;$env:PATH"
& "$env:GOROOT\bin\go.exe" install github.com/eljakani/ward@v0.4.1
# 3. Положить бинарь рядом с прочими security-CLI
Copy-Item "$env:GOPATH\bin\ward.exe" 'bin\ward.exe'
- Расположение:
bin/ward.exe(рядом с nuclei/gitleaks/lychee/squawk;bin/*в.gitignore→ бинарь машинно-локальный, в репозиторий не коммитится). - Go SDK (
bin/_runtimes/go, ~256 МБ) сохранён для обновлений (go install ...@latest); можно удалить —ward.exeстатичный и работает без Go. - Verified (2026-05-21):
bin\ward.exe version→ v0.4.1.
Smoke (verified 2026-05-21)
bin\ward.exe scan app -o json --no-color
Результат: 2 находки в Laravel-приложении app/ — [High] APP_DEBUG включён, [Medium] APP_ENV = 'local' (env-scanner: 2, config-scanner: 0, dependency-scanner: 0). Это ожидаемые dev-настройки, и одновременно — те самые go-live-проблемы, которые Ward и должен ловить (перед публикацией нужны APP_DEBUG=false + APP_ENV=production). Доказывает: Ward устанавливается и реально сканирует проект.
Использование
# несколько форматов сразу; report-файл(ы) пишутся в текущую папку
bin\ward.exe scan app -o json,sarif,html --no-color
# гейт по severity (exit 1 при находках ≥ уровня) — для CI/go-live
bin\ward.exe scan app --fail-on high --no-color
# подавить известные находки baseline-файлом
bin\ward.exe scan app --baseline docs/security/ward-baseline.json --no-color
- TUI по умолчанию (
-o tui) — в неинтерактивной оболочке зависнет; всегда задавать-o json/sarif/html/markdown. - Артефакт:
ward scan ... -o jsonпишетward-report.jsonв CWD — это временный отчёт, не коммитить. - Сеть: локальный анализ кода/конфигов; единственный outbound — OSV.dev для проверки CVE в зависимостях (как Enlightn security-checker — функциональный запрос, не телеметрия).
Границы (ADR-014)
IS3 — Ward (misconfig/secrets/deps Laravel) ≠ Larastan #12 (типы) ≠ Semgrep #25 (generic-паттерны кода). Dep-скан Ward ↔ Trivy #26 / Dependabot #27 — информационно, не дублирующий гейт.
Caveat
Молодой проект (фев 2026), single-maintainer → bus-factor. Митигация: pin версии (@v0.4.1); MIT → форкабелен при забрасывании.