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
|
Preferred-Languages: ru, en
|
||||||
Canonical: https://gl.mhspx.su/.well-known/security.txt
|
Canonical: https://gl.mhspx.su/.well-known/security.txt
|
||||||
Policy: https://gl.mhspx.su/security
|
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
|
else echo "==> sqlc: запросов пока нет, пропускаем"; fi
|
||||||
|
|
||||||
.PHONY: security
|
.PHONY: security
|
||||||
security: tools ## AppSec: govulncheck, gitleaks, trivy (по возможности)
|
security: tools ## AppSec: govulncheck, gitleaks, npm audit, trivy (по возможности)
|
||||||
@mkdir -p $(BUILD_DIR)
|
@mkdir -p $(BUILD_DIR)
|
||||||
@echo "==> govulncheck"
|
@echo "==> govulncheck"
|
||||||
@govulncheck ./cmd/... ./internal/... || { echo "govulncheck нашёл уязвимости"; exit 1; }
|
@govulncheck ./cmd/... ./internal/... || { echo "govulncheck нашёл уязвимости"; exit 1; }
|
||||||
@echo "==> gitleaks"
|
@echo "==> gitleaks"
|
||||||
@$(ROOT)/scripts/gitleaks-scan.sh
|
@$(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"
|
@echo "==> trivy filesystem scan"
|
||||||
@if command -v trivy >/dev/null 2>&1; then \
|
@if command -v trivy >/dev/null 2>&1; then \
|
||||||
trivy fs --quiet --scanners vuln,secret,misconfig --exit-code 1 \
|
trivy fs --quiet --scanners vuln,secret,misconfig --exit-code 1 \
|
||||||
--skip-dirs .cache --skip-dirs .git --skip-dirs web/node_modules .; \
|
--skip-dirs .cache --skip-dirs .git --skip-dirs web/node_modules .; \
|
||||||
else echo "trivy not installed — skipped"; fi
|
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
|
.PHONY: secrets-scan
|
||||||
secrets-scan: tools ## Только проверка на утечки секретов
|
secrets-scan: tools ## Только проверка на утечки секретов
|
||||||
@$(ROOT)/scripts/gitleaks-scan.sh
|
@$(ROOT)/scripts/gitleaks-scan.sh
|
||||||
|
|||||||
@@ -63,6 +63,10 @@ func staticContentType(rel string) string {
|
|||||||
return "text/css; charset=utf-8"
|
return "text/css; charset=utf-8"
|
||||||
case ".svg":
|
case ".svg":
|
||||||
return "image/svg+xml"
|
return "image/svg+xml"
|
||||||
|
case ".txt":
|
||||||
|
// security.txt (RFC 9116): в минимальном alpine-окружении mime может
|
||||||
|
// не знать расширение и отдать октет-поток.
|
||||||
|
return "text/plain; charset=utf-8"
|
||||||
}
|
}
|
||||||
return mime.TypeByExtension(filepath.Ext(rel))
|
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