2.9 KiB
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)
-
Input Validation
- FluentValidation con regex patterns
- Sanitización de HTML/scripts
- Longitud máxima de campos
- Validación de formato email
-
Security Headers
Content-Security-PolicyX-Content-Type-Options: nosniffX-Frame-Options: DENYReferrer-Policy: strict-origin-when-cross-originPermissions-PolicyStrict-Transport-Security(producción)
-
Rate Limiting
- 100 requests/minuto para queries GraphQL
- 30 mutations/minuto
- Queue limit para prevenir acumulación
-
GraphQL Security
- Query depth limit: 5 niveles
- Query complexity limit: 100
- Execution timeout: 30 segundos
- Pagination max: 50 items
-
Logging Seguro
- Filtrado de datos sensibles (passwords, tokens)
- Structured logging con Serilog
- Rotación de logs (7 días)
Frontend (Angular)
-
XSS Prevention
- Angular sanitization por defecto
- Content Security Policy
-
CSRF Protection
- No cookies de sesión (stateless GraphQL)
-
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 } } } } } }"}'