L26 · Publicación · 6 min

Seguridad básica para quien crea apps

En una frase

Cada Server Action y cada Route Handler de tu app es una puerta pública en internet, por lo que tu servidor debe comprobar quién ha entrado, validar cada dato recibido con un esquema, usar consultas parametrizadas, aplicar límites de uso y no usar jamás NEXT_PUBLIC_ en secretos.

Piénsalo así

Ocultar un botón en una página web es como poner un cartel de «Solo personal autorizado» en una puerta trasera sin llave. La seguridad real consiste en echar la llave a la puerta y comprobar la acreditación de quien intente abrirla, aunque venga directo desde el callejón.

Cómo funciona

En Next.js, cualquier Server Action o Route Handler de tu DefiniciónbackendLa parte de una app que funciona en un servidor: guarda datos, comprueba inicios de sesión y habla con otros servicios.Abrir en el glosario → puede llamarse directamente desde internet, no solo pulsando el formulario de tu DefiniciónfrontendLa parte de una app que funciona en el navegador de quien la visita: lo que se ve y se pulsa.Abrir en el glosario →. Por eso cada puerta del servidor sigue siempre el mismo orden de tres pasos antes de tocar la Definiciónbase de datosDonde tu app recuerda cosas entre visitas, como cuentas o recetas guardadas.Abrir en el glosario →: (1) comprobar la sesión de Better Auth y confirmar que esa persona tiene permiso sobre ese dato, (2) validar los datos recibidos con un esquema estricto (como Zod: tipo, longitud y formato), y (3) usar consultas parametrizadas para que el texto escrito se trate siempre como dato y nunca como una orden para la base de datos.

Mantén cada DefiniciónsecretoTodo lo que abre tus cuentas: claves de API, contraseñas, tokens. Solo se guarda en Vercel y en `.env.local`.Abrir en el glosario → en el servidor. Cualquier Definiciónvariable de entornoUn hueco con nombre, como `TOKENTIDE_API_KEY`, que guarda un ajuste o un secreto fuera de tu código.Abrir en el glosario → cuyo nombre empiece por NEXT_PUBLIC_ se envía al navegador de todas las personas que visitan tu web; por tanto, una Definiciónclave de APIUna contraseña que usa tu app con otro servicio. Quien la tenga puede gastar tu dinero.Abrir en el glosario →, la dirección de la base de datos o un secreto de acceso jamás deben llevar NEXT_PUBLIC_. Además, el desarrollo en tu equipo usa siempre su propia rama de desarrollo en Neon, nunca la base de datos de Definiciónproducción (Production)La versión publicada de tu app, la que ve todo el mundo. Sale de `main`.Abrir en el glosario →.

Protege las puertas sensibles o que consumen saldo con un Definiciónlímite de usoUn tope de cuántas veces se puede hacer algo, como intentos de inicio de sesión por minuto, para frenar abusos.Abrir en el glosario →: pon un tope por minuto a los intentos de inicio de sesión, al envío de formularios y a las llamadas a un DefiniciónmodeloEl sistema de IA que produce las respuestas, como el que hay detrás de tu agente.Abrir en el glosario → de IA. Cuando tu app envíe texto a un proveedor de IA, evita incluir datos personales salvo que la función lo requiera de verdad, y valida y escapa siempre la respuesta del modelo antes de mostrarla.

Por último, tu agente añade cabeceras de seguridad estrictas (incluida una política de seguridad de contenidos, CSP, y reglas CORS ajustadas) para que el navegador bloquee scripts inyectados e impida que otras webs suplanten a tu app. Puedes repasar la lista completa en la página Calidad y seguridad.

1 · Quién y cuántoSesión + límite de usoComprueba la sesión de Better Auth, los permisos y el límite de uso antes de seguir.
2 · Qué datos entranValidación con esquemaVerifica tipos, longitudes y valores permitidos; rechaza con claridad los datos mal formados.
3 · Guardado seguroConsulta parametrizadaToca la base de datos con consultas parametrizadas y secretos exclusivos del servidor.
FIG. 1 · Cada Server Action y cada Route Handler comprueba quién llama, valida los datos de entrada y solo entonces toca la base de datos.

Cómo se ve en tu proyecto

Siempre que tu agente escribe código que toca inicios de sesión, formularios, la base de datos o secretos, aplica la skill security-and-hardening. Antes de fusionar un pull request, puedes pedirle una revisión de seguridad de todas las rutas y variables de entorno.

Copia para tu agente

Haz una revisión de seguridad de mi proyecto usando la skill security-and-hardening: comprueba que cada Server Action y cada Route Handler verifica la sesión y valida los datos con un esquema, que todas las consultas son parametrizadas, que hay límites de uso y que ningún secreto lleva NEXT_PUBLIC_.

Comprobación rápida · 1 pregunta

¿Qué ocurre si llamas a una variable de entorno `NEXT_PUBLIC_TOKENTIDE_API_KEY`?

Profundiza

Siguiente lecciónAdaptable y accesible desde el principio

Última revisión 8 nov 2026