feat(security): security.txt отдаётся, npm audit и SBOM в AppSec
- /.well-known/security.txt уходил в SPA-заглушку (200 text/html): добавлена копия в web/public и явный тип text/plain в статике (RFC 9116, AGENT.md 11.3); - make security дополнен `npm audit --omit=dev --audit-level=high`; - новая цель `make sbom` — CycloneDX-отчёт зависимостей (trivy, если есть).
This commit is contained in:
@@ -4,3 +4,6 @@ Expires: 2027-12-31T00:00:00.000Z
|
||||
Preferred-Languages: ru, en
|
||||
Canonical: https://gl.mhspx.su/.well-known/security.txt
|
||||
Policy: https://gl.mhspx.su/security
|
||||
|
||||
# Этот файл отдаётся по адресу /.well-known/security.txt: копия для сборки
|
||||
# лежит в web/public/.well-known/security.txt и должна совпадать с этой.
|
||||
|
||||
@@ -142,18 +142,29 @@ generate: tools ## Проверить сгенерированные артеф
|
||||
else echo "==> sqlc: запросов пока нет, пропускаем"; fi
|
||||
|
||||
.PHONY: security
|
||||
security: tools ## AppSec: govulncheck, gitleaks, trivy (по возможности)
|
||||
security: tools ## AppSec: govulncheck, gitleaks, npm audit, trivy (по возможности)
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@echo "==> govulncheck"
|
||||
@govulncheck ./cmd/... ./internal/... || { echo "govulncheck нашёл уязвимости"; exit 1; }
|
||||
@echo "==> gitleaks"
|
||||
@$(ROOT)/scripts/gitleaks-scan.sh
|
||||
@echo "==> npm audit (web, только production-зависимости)"
|
||||
@cd $(WEB_DIR) && npm audit --omit=dev --audit-level=high || { echo "npm audit нашёл уязвимости"; exit 1; }
|
||||
@echo "==> trivy filesystem scan"
|
||||
@if command -v trivy >/dev/null 2>&1; then \
|
||||
trivy fs --quiet --scanners vuln,secret,misconfig --exit-code 1 \
|
||||
--skip-dirs .cache --skip-dirs .git --skip-dirs web/node_modules .; \
|
||||
else echo "trivy not installed — skipped"; fi
|
||||
|
||||
.PHONY: sbom
|
||||
sbom: ## SBOM зависимостей в build/sbom.cdx.json (trivy, если установлен)
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@if command -v trivy >/dev/null 2>&1; then \
|
||||
trivy fs --quiet --format cyclonedx --output $(BUILD_DIR)/sbom.cdx.json \
|
||||
--skip-dirs .cache --skip-dirs web/node_modules . && \
|
||||
echo "SBOM: $(BUILD_DIR)/sbom.cdx.json"; \
|
||||
else echo "trivy не установлен — SBOM не собран (запустите на сервере сборки)"; fi
|
||||
|
||||
.PHONY: secrets-scan
|
||||
secrets-scan: tools ## Только проверка на утечки секретов
|
||||
@$(ROOT)/scripts/gitleaks-scan.sh
|
||||
|
||||
@@ -63,6 +63,10 @@ func staticContentType(rel string) string {
|
||||
return "text/css; charset=utf-8"
|
||||
case ".svg":
|
||||
return "image/svg+xml"
|
||||
case ".txt":
|
||||
// security.txt (RFC 9116): в минимальном alpine-окружении mime может
|
||||
// не знать расширение и отдать октет-поток.
|
||||
return "text/plain; charset=utf-8"
|
||||
}
|
||||
return mime.TypeByExtension(filepath.Ext(rel))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# Политика безопасности glchat (RFC 9116)
|
||||
Contact: mailto:security@gl.mhspx.su
|
||||
Expires: 2027-12-31T00:00:00.000Z
|
||||
Preferred-Languages: ru, en
|
||||
Canonical: https://gl.mhspx.su/.well-known/security.txt
|
||||
Policy: https://gl.mhspx.su/security
|
||||
|
||||
# Этот файл отдаётся по адресу /.well-known/security.txt: копия для сборки
|
||||
# лежит в web/public/.well-known/security.txt и должна совпадать с этой.
|
||||
Reference in New Issue
Block a user