ADR-0046: Security Coding Standards
Статус
Принято.
Контекст
Gambling/fintech платформа является high-value target: реальные деньги, PII, игровые лицензии. Нарушение security приводит к финансовым потерям, отзыву лицензии, GDPR штрафам, репутационному ущербу.
Без явных security coding standards возникают:
- endpoints без авторизации;
- secrets в логах и appsettings;
- отсутствие tenant isolation в handlers;
- callback endpoints без signature validation;
- отсутствие rate limiting на sensitive operations.
Решение
Defence-in-Depth: Четыре Независимых Слоя
- Endpoint Policy —
[Authorize(Policy = "...")]на каждом endpoint. - MediatR AuthorizationBehavior —
ActorContext.HasPermission()для каждой command. - Handler Ownership Check — явная проверка
entity.TenantId == actorContext.TenantId. - Repository Scope Filters — автоматический
tenant_id/brand_idв каждом EF query.
Endpoint без [Authorize] — блокер в code review. Исключение только для явно public endpoints с явным [AllowAnonymous] и комментарием.
Secrets И PII В Логах
SensitiveDataMaskingPolicy в Serilog. Поля с [Sensitive] атрибутом не попадают в logs. Password, token, CVV, PAN, IBAN, email+name вместе — запрещены в structured log properties.
Secrets хранятся в Vault/k8s Secrets, читаются через IOptions<T>. appsettings.Production.json не содержит реальных credentials.
Input Validation
Two-level validation: API validator (format/range) + MediatR validator (business rules). Нет mass assignment через AutoMapper в aggregates. URL redirects — whitelist. File uploads — extension whitelist + size limit.
Callback Signature Validation
Каждый webhook callback валидируется по HMAC signature перед любой бизнес-логикой. Callback без подписи → 401 Unauthorized.
Rate Limiting
Auth endpoints — strict per-IP. Sensitive operations — sliding window per-actor. Rejection → 429 ProblemDetails.
Последствия
- Endpoint без авторизации не проходит architecture test.
- Secrets в логах обнаруживаются через log scanning в CI/CD.
- Tenant isolation проверяется интеграционными тестами (cross-tenant data access тест fail closed).
- Callback без подписи никогда не обрабатывается.
Ссылки
- Security Coding Rules
- 14 — Security Patterns
- ADR-0025 — Identity Role + Permission Scope Model
- ADR-0027 — Audit And Idempotency Standards
Обратные ссылки
Автоссылки: где используется этот документ.
- 14-security-patterns.md (1): Security Patterns — Authorization, PII, OWASP