# Seguridad y protección de datos clínicos

## Controles obligatorios

- Contraseñas con `password_hash()`/`password_verify()` (Argon2id cuando esté disponible), sesiones regeneradas tras autenticar, cookies `Secure`, `HttpOnly` y `SameSite`.
- PDO con consultas preparadas; validación de entrada en servidor; salida escapada según contexto; CSP y cabeceras de seguridad.
- Token CSRF por sesión/formulario para toda mutación.
- Política central `can($actor, $action, $resource)` antes de cada lectura, descarga, modificación o borrado. Un ID válido no prueba autorización.
- Registro de accesos a expedientes, permisos, descargas y acciones administrativas; el log no almacenará contenido clínico.
- Cifrado en tránsito (HTTPS), secretos en entorno seguro, copias cifradas, control de restauración y retención definida antes de producción.

## Fotografías

Originales y miniaturas viven en almacenamiento privado con nombres aleatorios; la BD guarda referencias, no rutas elegidas por el usuario. Se validan MIME y tamaño mediante inspección del servidor, se reprocesan imágenes, se eliminan EXIF/GPS de versiones de visualización y se generan miniaturas. Cada descarga pasa por autorización y auditoría.

## Datos personales y expediente

El sistema debe configurarse con aviso de privacidad, consentimiento, responsables, retención, derechos ARCO y procedimientos que correspondan antes de procesar datos reales. Esta documentación es una guía técnica y no reemplaza validación legal respecto de la normativa mexicana aplicable, incluidos datos personales sensibles y expediente clínico.

## Pruebas de seguridad de aceptación

Las pruebas de integración crearán odontólogos A y B, paciente de A y recursos asociados. Verificarán que B recibe 403 al cambiar IDs de URL/API para paciente, consulta, fotografía y descarga; que un permiso otorgado permite solo la acción concedida; y que una revocación vuelve a denegarla. También cubrirán CSRF, sesión, XSS reflejado/almacenado, SQL injection, subida de archivo malicioso, paginación y doble solicitud de cita/recordatorio.

La prueba unitaria disponible para la Fase 2 (`tests/Unit/AuthenticationSecurityTest.php`) cubre token CSRF, creación de sesión autenticada y la exclusión del hash de contraseña de la sesión. Las pruebas de autorización por recurso se incorporarán junto con los recursos clínicos de las fases 4 a 6.
