Seguridad web sin paranoia: los 5 problemas que vemos repetidos en PyMEs
OWASP Top 10 es un buen marco teorico pero suele paralizar a las pymes. Vamos a los 5 problemas concretos que vemos repetidos en proyectos que salen a producción sin haberlos pensado.
28 de noviembre de 2025
La conversación sobre seguridad en software arranca casi siempre con un PDF de OWASP Top 10 y termina en parálisis: hay tantas cosas para revisar que el equipo decide "lo vemos después". Y "después" suele ser cuando ya hay un problema.
Vamos a ir al revés. Estos son los 5 problemas concretos que vemos repetidos en proyectos de PyMEs que ya estaban en producción. Si cubris estos 5, estas mejor que el 90% de las webapps que circulan.
1. Validación solo en el frontend
El error más común. El formulario tiene validación en JavaScript del lado del cliente: "este campo es obligatorio", "el mail tiene que tener arroba", etc. Y el backend asume que los datos llegan bien.
El problema: cualquier persona con curl, Postman o las dev tools del navegador puede mandar lo que quiera al backend, salteandose la validación del frontend.
Lo que tenés que hacer: toda validación crítica DEBE estar también en el backend. El frontend válida para mejorar UX (que el usuario vea errores rápido). El backend válida para mejorar seguridad (que la base de datos no reciba basura).
En proyectos como Mi Seguro de Auto, donde se procesan datos personales y se cotizan pólizas reales, cada campo se válida dos veces: en el cliente para feedback inmediato, en el servidor para confianza.
2. Secretos hardcodeados en el código
Pasamos por esto en auditorías más veces de las que quisiera. API keys, contraseñas de base de datos, tokens de servicios, todo dentro del repositorio en archivos como config.js o constants.ts.
Eso es un problema doble: cualquiera con acceso al código (incluyendo developers que ya no están en la empresa) tiene acceso a los sistemas. Y si el repo se filtra alguna vez (sucede más seguido de lo que se cree), los secretos quedan públicos.
Lo que tenés que hacer:
- Todas las credenciales en variables de entorno (
.env). .enven.gitignoresiempre.- Un
.env.examplecon las variables sin valores reales. - Para producción, usar el secret manager del proveedor (Vercel, AWS Secrets Manager, etc).
- Rotar credenciales cuando alguien deja el equipo.
3. Sin Row Level Security en bases multi-tenant
Si tu aplicación tiene varios clientes/usuarios que NO deben ver datos de otros, el aislamiento NO puede depender solo del filtro en el código de la aplicación.
Típico: una consulta que dice WHERE user_id = ? y se trustea que el código siempre pone el ID correcto. Una vulnerabilidad de IDOR (insecure direct object reference) o un bug en cualquier endpoint puede dejar que un usuario vea datos de otro.
Lo que tenés que hacer: configurar Row Level Security a nivel base de datos. En Postgres (y por ende en Supabase) se hace con políticas RLS que se aplican automáticamente. La base de datos NO devuelve filas que no correspondan al usuario actual, sin importar como está escrita la query.
Es una capa de defensa extra que vale oro. Si un endpoint olvida el filtro o un atacante logra ejecutar una query inesperada, RLS sigue protegiendo los datos.
4. Autenticación casera
"Hicimos nuestro propio sistema de auth porque tener todo bajo nuestro control es más seguro". Es el camino más rápido para tener un problema serio.
Hacer auth bien (hashing de passwords con argon2 o bcrypt y sus salts, tokens JWT con rotación, recuperación segura de password, prevención de timing attacks, rate limiting de intentos) lleva semanas y rara vez sale bien la primera vez.
Lo que tenés que hacer: usar un proveedor maduro. Supabase Auth, Auth0, Clerk, NextAuth/Auth.js. Todos resuelven los casos difíciles y se mantienen al día con las mejores prácticas. Tu código solo orquesta, no implementa criptografia.
5. Logs con información sensible
Cuando algo falla en producción, el primer instinto es loguear todo el contexto. Y entre ese contexto suelen aparecer: contraseñas en plano (porque venían en el body de la request), tokens, datos de tarjetas, números de documento.
Esos logs terminan en herramientas como Sentry, Datadog o CloudWatch, accesibles por más gente de la que debería, y persisten meses.
Lo que tenés que hacer:
- Tener una lista de campos sensibles que NUNCA se loguean (
password,token,creditCard,ssn,dni). - Sanitizar antes de loguear: reemplazar valores sensibles por
***automáticamente. - Revisar periódicamente los logs para detectar fugas.
Lo que NO esta en esta lista (a propósito)
OWASP tiene cosas más avanzadas: cross-site scripting, SQL injection, deserialización insegura, etc. Son importantes, pero la realidad es que los frameworks modernos (React, Next.js, ORMs como Prisma) cubren esos vectores por defecto si no te peleas activamente con ellos. Para una PyME que arranca, los 5 puntos de arriba dan mucho más ROI de seguridad que pelearse con CSRF cuando ya estas usando Next.js bien configurado.
Conclusión
La seguridad no es un proyecto, es una costumbre. Si cubris los 5 puntos al desarrollar, repasas anualmente, y mantenes las dependencias actualizadas, estas en buena forma. Si nunca pensaste en ninguno y tenés algo en producción procesando datos de clientes, vale la pena una revisión.
Si querés una auditoría pragmática de tu aplicación (no un PDF de 80 páginas, un informe con cosas concretas para arreglar y orden de prioridad), escribinos.
Por Esteban Aleart, Founder & Lead Engineer de Pair Programming.
FAQ
Mi sitio es chico, realmente necesito preocuparme por seguridad?
Si tu sitio guarda datos de usuarios (mails, teléfonos, mucho más datos personales o de pago), si. Los atacantes automatizados no eligen por tamaño: rastrean toda la web buscando vulnerabilidades conocidas. Un sitio chico mal protegido se compromete igual que uno grande.
Cada cuanto debería hacer una auditoría de seguridad?
Para PyMEs con webapps en producción, una auditoría anual es razonable. Si manejas datos sensibles (salud, financiero) o tenés muchos usuarios, semestral.
Cuánto cuesta una auditoría de seguridad?
Una auditoría pragmática para una webapp típica va de USD 800 a USD 3.500 dependiendo del alcance. Auditorías formales con certificación son más caras.
Qué pasa si tengo un incidente de seguridad?
Primero, contener (cortar el acceso al atacante, rotar credenciales). Segundo, evaluar el alcance (que datos se vieron afectados). Tercero, notificar (a usuarios, a autoridades según el caso). Cuarto, post-mortem para que no vuelva a pasar. Tener un plan escrito antes de que pase es lo único que evita el caos.
Usar servicios como Supabase o Auth0 es seguro?
Si, mucho más seguro que hacerlo casero. Estos servicios tienen equipos dedicados a seguridad y certificaciones formales. El riesgo se traslada al proveedor, qué sabe lo que hace.
Artículos relacionados
Por que Next.js es nuestro stack default (y cuando no lo elegimos)
Mismo stack en cotizadores públicos, CRMs internos, plataformas con IA y sitios premium europeos. No es casualidad. Te cuento por que Next.js + Supabase es nuestro default y cuando lo cambiamos.
NegocioTransformación digital sin buzzwords: qué significa de verdad para una PyME
Transformación digital es uno de esos buzzwords que ya no significan nada. Cuando una PyME real lo necesita, lo que necesita son 3 cosas concretas. Te las cuento sin powerpoint.
TecnologíaCloud y DevOps para PyMEs: infraestructura escalable sin sobre-ingeniar
La mayoría de las pymes no necesitan Kubernetes. Necesitan algo que funcione, qué no se caiga el día que aparece un cliente importante, y que no las funda en costos fijos. Vamos al grano.