academia/docs/OWASP_CHECKLIST.md

2.9 KiB

OWASP Top 10 Security Checklist

Estado: Validado

# Vulnerabilidad Mitigación Implementada Ubicación
A01 Broken Access Control No aplica (sin autenticación requerida) N/A
A02 Cryptographic Failures HTTPS forzado en producción (HSTS) Program.cs:127
A03 Injection FluentValidation + Regex sanitization, EF Core parameterized queries CreateStudentValidator.cs, EnrollStudentValidator.cs
A04 Insecure Design Clean Architecture, input validation en todas las capas Arquitectura por capas
A05 Security Misconfiguration Security headers (CSP, X-Frame-Options, etc.), Exception details disabled in prod Program.cs:106-130, GraphQLExtensions.cs:53
A06 Vulnerable Components Dependencias actualizadas (.NET 10, Angular 21) *.csproj, package.json
A07 Auth Failures No aplica (sin autenticación en este MVP) N/A
A08 Data Integrity Failures Input validation, FluentValidation, GraphQL type safety Validators
A09 Security Logging Failures Serilog structured logging, sensitive data filtering appsettings.json:38-45
A10 Server-Side Request Forgery No endpoints que acepten URLs externas N/A

Medidas de Seguridad Implementadas

Backend (.NET)

  1. Input Validation

    • FluentValidation con regex patterns
    • Sanitización de HTML/scripts
    • Longitud máxima de campos
    • Validación de formato email
  2. Security Headers

    • Content-Security-Policy
    • X-Content-Type-Options: nosniff
    • X-Frame-Options: DENY
    • Referrer-Policy: strict-origin-when-cross-origin
    • Permissions-Policy
    • Strict-Transport-Security (producción)
  3. Rate Limiting

    • 100 requests/minuto para queries GraphQL
    • 30 mutations/minuto
    • Queue limit para prevenir acumulación
  4. GraphQL Security

    • Query depth limit: 5 niveles
    • Query complexity limit: 100
    • Execution timeout: 30 segundos
    • Pagination max: 50 items
  5. Logging Seguro

    • Filtrado de datos sensibles (passwords, tokens)
    • Structured logging con Serilog
    • Rotación de logs (7 días)

Frontend (Angular)

  1. XSS Prevention

    • Angular sanitization por defecto
    • Content Security Policy
  2. CSRF Protection

    • No cookies de sesión (stateless GraphQL)
  3. Secure Communication

    • Solo HTTPS en producción
    • GraphQL sobre HTTPS

Pruebas de Seguridad Recomendadas

# Test security headers
curl -I http://localhost:5000/graphql

# Test rate limiting (debe retornar 429 después de 100 requests)
for i in {1..150}; do curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5000/graphql; done

# Test query depth (debe fallar con depth > 5)
curl -X POST http://localhost:5000/graphql \
  -H "Content-Type: application/json" \
  -d '{"query":"{ students { enrollments { subject { professor { subjects { name } } } } } }"}'