66 lines
4.5 KiB
Markdown
66 lines
4.5 KiB
Markdown
|
|
# 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).
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
# 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)
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
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 устанавливается и реально сканирует проект.
|
|||
|
|
|
|||
|
|
## Использование
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
# несколько форматов сразу; 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 → форкабелен при забрасывании.
|