Ir al contenido
- Flashpi guarda solo un hash SHA-256 de cada llave, así que una llave se muestra una sola vez, al crearla, y no se puede recuperar después.
- Cada llave se puede limitar a un emisor, a acceso de solo lectura y a una lista de direcciones IP. Consulta Autenticación y API keys.
- Revocar una llave tiene efecto de inmediato, sin código de autenticación, para que una llave filtrada se pueda detener enseguida. Revocar una llave de producción envía un correo a todos los propietarios de la cuenta.
- Crear o cambiar una llave de producción requiere un propietario de la cuenta que confirme con el código de su app de autenticación.
- Los request logs registran qué llave hizo cada solicitud y desde qué dirección IP, durante 30 días, sin los cuerpos.
- Un
.p12 subido y su contraseña se cifran apenas llegan, con una llave administrada por AWS KMS, en un área de cuarentena dedicada. La contraseña nunca se guarda en claro y la API nunca la devuelve.
- Un servicio aislado de incorporación revisa el archivo y guarda el certificado cifrado de nuevo con otra llave; luego se elimina el archivo original subido. En el alta desde el certificado, la primera revisión no guarda nada: el archivo cifrado espera a que completes el alta, que lo revisa de nuevo, guarda el certificado y elimina el archivo. El archivo de un alta que no se completa (también una rechazada o vencida) se elimina automáticamente unos 7 días después de subirlo.
- Solo el servicio de firma puede descifrar el certificado, en memoria, para firmar tus comprobantes. La API que recibe tus solicitudes no puede leerlo.
- Los certificados se revisan con su entidad de certificación por revocación al subirlos y periódicamente después; un certificado revocado nunca firma. Consulta Certificados.
- Cada solicitud se firma con HMAC-SHA256 según Standard Webhooks, con una marca de tiempo que limita las repeticiones a 5 minutos. Verifica la firma antes de confiar en el cuerpo. Consulta Webhooks.
- Los secretos de firma se guardan cifrados, se pueden rotar con una superposición, y leer o rotar uno en la consola requiere una confirmación reciente y queda auditado.
- Flashpi solo llama a URL HTTPS públicas. Rechaza los nombres locales y las direcciones privadas, de loopback y de enlace local (incluidas las de metadatos de la nube), resuelve el host por su cuenta en cada entrega, se conecta solo a direcciones públicas y nunca sigue redirecciones.
- Flashpi no publica direcciones IP fijas para sus webhooks: la firma es la prueba de que una solicitud viene de Flashpi.
- El acceso con Google usa un código de autorización con PKCE. Quienes tienen autenticador siguen ingresando su código después de Google. Flashpi recibe el perfil básico de Google (correo, nombre, nombres y apellidos, URL de la foto e idioma), sin acceso a contactos ni otras API de Google.
- Las contraseñas se guardan con argon2id. Las contraseñas o códigos incorrectos repetidos bloquean nuevos intentos durante 15 minutos.
- La verificación en dos pasos (TOTP) es obligatoria para los propietarios de la cuenta, y los propietarios pueden exigirla a todo el equipo.
- Las acciones sensibles (llaves de producción, carga de certificados, cambios en el equipo, secretos de webhooks, cambios en la verificación en dos pasos, cambio de contraseña) requieren una confirmación en los últimos 10 minutos: un código de la app de autenticación o de recuperación cuando tienes app de autenticación, nunca solo la contraseña.
- Si solo usas Google y no tienes autenticador, debes activarlo antes de las acciones sensibles. Crear una contraseña usa el correo de restablecimiento. Restablecerla desconecta Google y termina las sesiones existentes; soporte también puede quitar el acceso con Google tras verificar la titularidad.
- Las sesiones viven en el servidor detrás de una cookie httpOnly y
SameSite=Strict, duran 12 horas y terminan después de 2 horas sin actividad. Cambiar tu contraseña cierra tus otras sesiones.
- Un enlace de verificación de correo solo se completa en el navegador que lo pidió, o en un navegador con la sesión iniciada en la misma cuenta.
- Los eventos relevantes para la seguridad, como los inicios de sesión, los cambios en la verificación en dos pasos y los nuevos códigos de recuperación, se registran, y los importantes se te notifican por correo.
flashpi.com.ec no usa fuentes ni widgets externos. El sitio público y esta documentación cargan Google Analytics y Microsoft Clarity solo si los aceptas en el aviso de cookies, y puedes retirar tu consentimiento en «Preferencias de cookies», al pie de cada página; mientras no aceptes, no se carga ningún script externo. La consola nunca carga scripts ni analítica de terceros. La consola puede cargar la foto del perfil de Google conectado desde lh3.googleusercontent.com; esa solicitud comunica a Google la IP y los datos del navegador del visitante, sin la URL de referencia. Las demás imágenes y fuentes se sirven desde Flashpi.
- Cada página se sirve con una Content-Security-Policy estricta, además de HSTS y protección contra el enmarcado. La de la consola solo permite los scripts y estilos propios de Flashpi; la del sitio público y la de la documentación permiten además los scripts de Google Analytics y Microsoft Clarity, que solo se cargan con tu consentimiento.
- La consola llama a su API en el mismo origen, así que no se abre ningún acceso entre orígenes.
- Las respuestas de error nunca incluyen las respuestas sin procesar del SRI ni detalles internos: traen un código estable y un
requestId que soporte puede rastrear.
- Los logs de Flashpi ocultan el encabezado
Authorization, las cookies y otras credenciales, y guardan las rutas sin su query string.
- Los datos de prueba y de producción están separados: una llave de prueba nunca puede leer comprobantes de producción.
- Mantén las API keys y los secretos de webhooks en tus servidores, en un gestor de secretos o en variables de entorno, nunca en código de frontend o móvil ni en un repositorio.
- Usa una llave distinta por sistema, el alcance y el acceso más limitados que funcionen, y una lista de IP permitidas cuando tus servidores tengan direcciones fijas.
- Verifica la firma de cada webhook con el cuerpo sin procesar, y rechaza las marcas de tiempo antiguas.
- Envía una
Idempotency-Key en cada POST, para que los reintentos nunca emitan un comprobante dos veces.
- Revisa los request logs y el registro de entregas de webhooks en la consola, y revoca lo que ya no uses.