Secretos y protección de datos
Las claves, los tokens y los datos personales son lo que los atacantes buscan realmente. Protégelos en reposo, en tránsito y en el historial de tu código fuente.
Lista de verificación
- Mantén los secretos fuera del código y del cliente. Las claves de API, las contraseñas de bases de datos y los secretos de firma deben estar en variables de entorno o en un gestor de secretos, nunca codificados en el código ni enviados al navegador. Las herramientas de IA a menudo incrustan claves en el código del cliente; busca en tu bundle cualquier cosa que parezca una clave.
- Mantén los secretos fuera de git. Añade
.env,*.pemy*.keya.gitignoreantes del primer commit. Todo lo que se haya confirmado alguna vez está comprometido, incluso si se borra después, porque permanece en el historial. Rótalo. - Cifra los datos sensibles en reposo. Usa cifrado autenticado (AES-256-GCM) para los secretos almacenados y el contenido sensible de los usuarios, con la clave guardada fuera de la base de datos.
- Sirve todo por TLS. Nada de HTTP sin cifrar para cualquier cosa que transporte una credencial o datos personales. Redirige HTTP a HTTPS y configura HSTS.
- No pongas secretos ni datos personales en las URL. Las cadenas de consulta acaban en registros, en el historial del navegador y en el encabezado Referer. Ponlos en el cuerpo de la solicitud.
- Devuelve el mínimo. Un endpoint de perfil o "me" debe devolver solo lo que necesita la interfaz, nunca hashes de contraseñas, claves ni indicadores internos.
- Guarda los tokens donde los scripts no puedan alcanzarlos, cuando sea posible. Un JWT en
localStoragelo puede leer cualquier script, así que un XSS lo roba. Una cookie httpOnly evita eso (a costa de necesitar gestión de CSRF). En cualquier caso, una Content-Security-Policy estricta es tu respaldo. Consulta infraestructura. - Admite los derechos sobre los datos. Permite a los usuarios exportar y eliminar sus datos, y purgarlos según un calendario. Esto es una buena práctica y, para muchos, un requisito legal.
Cómo probar
- Abre la pestaña de red de las herramientas de desarrollo del navegador y el bundle JS; busca
sk-,eyJ,password,secret,key. - Analiza el repositorio y su historial con un escáner de secretos.
- Haz una solicitud a tu endpoint "me" y lee cada campo que devuelve.