Files
portal/docs/security/ward-setup.md
T
Дмитрий 3fc5501dc5 docs(infosec): A8 ZAP #68 + Ward #70 установлены портативно — PENDING INSTALL снят
- 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>
2026-05-21 15:36:06 +03:00

4.5 KiB
Raw Blame History

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 → форкабелен при забрасывании.