# 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 ```bash # 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 } } } } } }"}' ```