Seguridad
Qué protegemos, cómo, y qué nos falta
Esta página tiene dos partes. La primera dice lo que el sistema hace. La segunda dice lo que no hace. La segunda es la que de verdad informa, y es la que casi nadie publica.

Alcance de esta página
Ningún sistema es completamente seguro, y quien afirme lo contrario está vendiendo algo. Computronic Jota Systems no cuenta con certificaciones de seguridad, no ha sido auditado por un tercero independiente y no se le ha practicado una prueba de intrusión. Lo que sí existe, y es lo que se detalla a continuación, es un conjunto de controles técnicos concretos aplicados desde el diseño: aislamiento de datos en la propia base, permisos por rol y por columna, validación de todo lo que entra y registro de lo que se modifica. Debajo encontrarás cada uno explicado, y a continuación una lista igual de detallada de lo que todavía no cubrimos. Publicamos las dos porque es la única forma de que puedas juzgar por ti mismo.
Los controles que sí hay
Seis, y cada uno está en el código. Despliega el que quieras para ver qué protege y qué pasaría sin él.
Aislamiento en la base de datos
Qué protege: Que un cliente no pueda ver las cotizaciones, los proyectos, los pagos ni los datos de otro cliente.
Cómo funciona
Las reglas de acceso viven en Postgres (RLS), no en la pantalla. Cada tabla tiene políticas que dicen qué filas puede ver cada rol, y se evalúan en el motor de la base de datos. Además los permisos son por COLUMNA: una persona no puede cambiar su propio rol ni darse permisos, porque esa columna no es modificable desde la aplicación.
Si el aislamiento viviera en el código de las pantallas, bastaría un filtro olvidado en una consulta —o una dirección adivinada— para que un cliente viera lo de otro. Así, aunque la consulta estuviera mal escrita, la base de datos no devuelve esas filas.
Los secretos no llegan al navegador
Qué protege: Que la clave con permisos totales de la base de datos no acabe en el código que cualquiera puede leer.
Cómo funciona
La clave de servicio vive en una variable de entorno del servidor y se usa en un solo archivo. Nunca va en una variable que empiece por `NEXT_PUBLIC_`, porque esas se incrustan en el paquete que se descarga el navegador. El archivo con las claves está en `.gitignore` y el de ejemplo lleva valores falsos.
Esa clave se salta TODAS las políticas de seguridad. Publicada en el navegador, cualquiera podría leer y borrar la base de datos completa. Es el fallo que más veces se ve en proyectos reales y el más fácil de cometer: basta escribir mal el nombre de una variable.
Todo lo que entra se valida en el servidor
Qué protege: Que un formulario manipulado, o una petición hecha a mano sin pasar por la página, no meta datos inválidos ni peligrosos.
Cómo funciona
Cada formulario tiene un esquema que define forma, tipo y longitud de cada campo, y se comprueba EN EL SERVIDOR. La validación del navegador está para ser amable con quien escribe; la que decide es la del servidor, porque la del navegador se salta con tres clics. Las consultas siempre van con parámetros: nunca se arma una consulta pegando texto.
Sin validación en servidor, cualquiera puede mandar una petición directa con lo que quiera. Y sin consultas con parámetros, un texto como `' OR 1=1 --` dejaría de ser un texto y pasaría a ser parte de la consulta: es la inyección SQL de siempre.
Límite de intentos por dirección IP
Qué protege: Que nadie pruebe contraseñas a lo bruto ni llene los formularios públicos de basura automatizada.
Cómo funciona
El conteo vive en la base de datos, no en la memoria del servidor: así sigue valiendo aunque el servidor se levante en varias copias a la vez. Cada formulario tiene su propio límite, y los que más importan —entrar, registrarse— se cierran si el propio control falla, en vez de dejar pasar. Lo que sube un cliente con su sesión se cuenta por cuenta y no por IP, para que el exceso de uno no deje sin pagar a otro que comparte la misma red.
Sin límite, probar las mil contraseñas más usadas contra una cuenta es cuestión de segundos. Con él, lleva más de un día. No hace imposible el ataque: lo hace tan lento que deja de valer la pena.
Los archivos que se suben se revisan
Qué protege: Que un comprobante de pago o un contrato firmado no sea en realidad un programa.
Cómo funciona
Se comprueba el tipo y el tamaño, y se mira el contenido real del archivo —sus primeros bytes— en vez de creerse la extensión del nombre. Los comprobantes y los contratos van a un almacenamiento PRIVADO: se leen con un enlace temporal que caduca, no con una dirección pública que se pueda compartir o adivinar.
Renombrar `programa.exe` a `comprobante.jpg` es trivial. Y si los comprobantes estuvieran en una dirección pública, bastaría cambiar un número en la dirección para ver el de otro cliente.
Cabeceras de seguridad en cada respuesta
Qué protege: Que otra web no pueda meter la nuestra dentro de un marco para engañar a quien hace clic, y que el navegador no adivine tipos de archivo.
Cómo funciona
Se mandan en todas las respuestas desde la configuración del proyecto: prohibido meter el sitio en un marco, prohibido adivinar el tipo de contenido, control de qué se envía al salir del sitio, y la política de contenidos. Las páginas privadas llevan además la orden de no guardarse en caché.
Sin la primera, otro sitio puede poner el nuestro en un marco invisible y hacer que quien cree pulsar un botón suyo pulse uno nuestro. Sin la de caché, el panel de alguien puede quedar guardado en el navegador de una computadora compartida.
Lo que NO tenemos
Esta lista es tan importante como la de arriba, y está aquí para que no tengas que descubrirla por tu cuenta.
Ninguna certificación, de ninguna clase
No tenemos ISO 27001 ni ninguna otra. Si alguna vez ves un sello de certificación en este sitio, es un error y queremos que nos lo digas.
Ninguna auditoría externa ni prueba de intrusión
Nadie de fuera ha revisado este código buscando fallos. Los controles de arriba los diseñamos nosotros, y quien diseña una defensa es siempre quien peor ve sus huecos.
La política de contenidos no está cerrada del todo
La cabecera que limita qué código puede ejecutarse en la página permite estilos y scripts incrustados (`unsafe-inline`). Hace falta porque Next.js incrusta código propio en el HTML para arrancar. Cerrarlo del todo requiere un sistema de firmas por petición que todavía no está puesto. Mientras no esté, esa defensa está a medias, y es mejor que lo sepas por nosotros.
Segundo factor de autenticación
Todavía no hay verificación en dos pasos para entrar. Está previsto; hoy la contraseña es lo único que separa a alguien de una cuenta.
Respaldos probados
Hay respaldos automáticos. Lo que no hay es una restauración completa probada de principio a fin, y hasta que no se haya hecho una, lo honesto es decir que tenemos copias, no que tenemos respaldos. Una copia que nunca se restauró no ha demostrado nada.
Revisión legal de los documentos
La política de privacidad, los términos y el modelo de contrato los redactamos nosotros sobre la normativa peruana vigente. Todavía no hemos encargado su revisión a un estudio de abogados, y lo decimos aquí porque esta página es la de lo que no tenemos.
¿Encontraste un fallo?
Escríbenos a computronicjota0406@gmail.com y cuéntanos qué viste. No tenemos un programa de recompensas y no podemos pagarte, pero sí podemos responderte, arreglarlo y darte las gracias en serio. Te pedimos una sola cosa: no publiques el fallo hasta que esté corregido, y no entres a datos que no sean tuyos para demostrarlo.
