Segurança — D2U.NET
D2U.NET · Arquitetura: Arquitetura · Review legado: Code-Review-Fluxos-Externos
Padrão obrigatório para escrever código. Todo PR deve passar o checklist §20.
Documento master (repo)
| Ficheiro | Conteúdo |
|---|---|
C:\Projetos\D2U.NET\D2U.NET\d2u.net\Docs_New\security\project-security-standards.md |
Base Enneal (§1–26) + perfil D2U §27 |
docs_New/security/README.md |
Índice pasta segurança |
ProjectSecurity_Generic.md (raiz repo) |
Template genérico reutilizável Enneal |
Origem: ProjectSecurity_Generic.md copiado para docs_New/security/ e especializado para D2U.
Placeholders D2U.NET
| Placeholder | Valor |
|---|---|
{PROJECT_NAME} |
D2U.NET / Dictate2Us |
{APP_COOKIE_PREFIX} |
d2u |
{PRIMARY_DOMAIN} |
{company}.dictate2us.com |
{PAYMENT_PROVIDER} |
Stripe (+ RealEx/PayPal legacy — avaliar) |
{TENANT_MODEL} |
Multi-tenant (CompanyId) |
{DB_ENGINE} |
PostgreSQL 16 (schema d2u) — ver Base-de-Dados |
{DEPLOY_TARGET} |
Kestrel/IIS + D2U.Workers |
Regras rápidas (não negociáveis)
- Zero secrets in repo — Key Vault, User Secrets, env vars
- Multi-tenant —
CompanyIdem queries + testes cross-company - Fail secure — negar por defeito
- Server-side validation — FluentValidation em todo input
- CSRF — antiforgery em POST Razor Pages
- CSP + nonces — sem
unsafe-inline, sem handlers inline - Headers HTTP — HSTS, nosniff, DENY frame, CSP (§3 doc master)
- Upload — allowlist, GUID interno, fora de
wwwroot, auth no download - Pagamentos — webhook assinado, idempotente; nunca confirmar por redirect
- Logs — sem passwords, API keys, PHI desnecessário
Dívida legado — não repetir
| Legado Java | Problema | Regra .NET |
|---|---|---|
JobHandler XML-RPC |
API key hardcoded | X-D2U-Api-Key em vault |
JobXMLFileTransfer |
FTP password no source | IOptions<VendorFtpOptions> |
| DWR | crossDomainSessionSecurity=false | CORS allowlist |
| Sessão 360 min | Janela longa | Revisar cookie max 8h sliding |
| BlogTalk | Sem rate limit | Rate limit + HTTPS |
Detalhe: Code-Review-Fluxos-Externos
Policies ASP.NET (Onda 1 + authZ 2026-08)
| Policy | Uso | Java |
|---|---|---|
RequireMedTransUser |
Área MedTrans | authenticated |
RequireAdmin |
Admin company | Administrator/Supervisor/Director |
RequireSuperUser |
/SuperUser/* |
SuperUser |
RequireContractor |
Jobs contractor | ContractorAdministrator |
CanManageClients |
CRUD clients + ViewOnly | canManageClient / canViewClient |
CanManageStaff |
Staff/MRA/Managers + MfaManagement | canManageStaff / canViewUsers |
CanManageJobs |
canEditJob \|\| canDeleteJob (não usar em Delete) |
composto |
CanEditJob |
Jobs/Edit |
canEditJob |
CanDeleteJob |
Jobs/Delete |
canDeleteJob |
CanSplitJobs |
Jobs/Split |
canSplitJobs |
CanCreateNewJob |
Create job | canCreateNewJob |
CanViewReports |
Relatórios | report flags |
Bugs fechados: AuthZ-Bugs-2026-08-01. Visão homolog: Docs_New/operations/dual-run-overview.md.
| CanAccessOutsideReport | Flow 22 |
| CanManageIntegrations | SpeechLive, FTP |
Ver §27 em project-security-standards.md.
Integrações — requisitos segurança
| Integração | Auth | Webhook / notas |
|---|---|---|
| Stripe | secret key vault | /webhooks/stripe — assinatura |
| RealEx | env | /webhooks/realex — avaliar sunset |
| SpeechLive SPS | API key | rate limit |
| XML-RPC BlogTalk | API key header | substituir hardcoded |
| HTTP POST parceiros | API key | não portar HttpPostListener |
| Mobile API | session | validar company |
| Vendor FTP | vault per vendor | Winscribe/MediaHawk/DialDictate/BigHand |
| Mail/FTP ingress | SMTP/IMAP secrets | não logar PHI |
Cookies D2U (Onda 1 — Program.cs)
// Auth: d2u.auth — HttpOnly, Secure, SameSite=Lax, max 8h sliding
// CSRF: d2u.csrf — SameSite=Strict
// Prefixo: {APP_COOKIE_PREFIX} = d2u
Spec: §5–6 em project-security-standards.md + docs_New/architecture/authentication.md
PR checklist (resumo §20)
Obrigatório em todo PR
- Sem segredos commitados
- Inputs validados server-side
- Auth + policy em endpoints sensíveis
- CompanyId / ownership validado
- POST Razor com antiforgery
- Sem
@Html.Raw(userInput) - Sem SQL concatenado
- Logs sem dados sensíveis
Integrações / pagamentos
- Webhook com assinatura + idempotência
- Upload com allowlist + path seguro
- Teste cross-tenant se tocar dados
Checklist completo: §20–22 em project-security-standards.md
Onde aplicar no roadmap
| Onda | Actividades segurança |
|---|---|
| 1 | Headers middleware, cookies, CSRF, policies base |
| 4 | Stripe webhook §13 |
| 6 | API keys integrações, rate limit XML-RPC |
| 9 | Hardening completo, audit log, scans CI |
| 10 | Testes segurança §22, ZAP stage |
Ver Roadmap
Referências
- OWASP Top 10, ASVS
- Microsoft ASP.NET Core Security
- Stripe Security Best Practices
- Repo:
docs_New/security/project-security-standards.md(documento completo ~1500 linhas)