Tunnel Connector
El Tunnel Connector permite que Floogos ejecute queries MySQL contra una base de datos en tu hosting compartido — ese donde el puerto de MySQL no es accesible desde fuera y no hay VPN ni API. Subís un único archivo PHP a tu hosting y Floogos habla con él por HTTPS, de forma segura, sin exponer nunca tu base de datos.
Cómo funciona
Sección titulada «Cómo funciona»Floogos ──HTTPS POST──► tunnel.php (tu hosting) ──PDO──► MySQL (localhost) X-Tunnel-SecretFloogos nunca se conecta directo a MySQL. Envía una query (como JSON) a tunnel.php por el puerto 443 — que ya está abierto en cualquier hosting web — y el túnel la ejecuta localmente con prepared statements y devuelve las filas.
Requisitos
Sección titulada «Requisitos»- Cualquier hosting con PHP 7.4+ y MySQL/MariaDB (hosting compartido, cPanel, VPS…).
- Acceso para subir un archivo (FTP/SFTP o el file manager).
- El usuario y la contraseña de la base de datos (los mismos que ya usa tu sitio).
Paso 1 — Generá tu configuración
Sección titulada «Paso 1 — Generá tu configuración»Completá los datos de tu base de datos abajo. El asistente genera un secret aleatorio fuerte y arma tu tunnel.config.php. Todo ocurre en tu navegador — no se envía nada a ningún lado.
Completá los datos, generá el secret y descargá tu tunnel.config.php. Todo ocurre en tu navegador — no se envía nada.
⚠️ Este archivo contiene credenciales: subilo por FTP/SFTP, nunca a un repositorio público, e idealmente fuera del webroot.
Paso 2 — Subí los archivos
Sección titulada «Paso 2 — Subí los archivos»-
Desde el asistente de arriba, descargá ambos archivos:
tunnel.php(el conector, igual para todos) y tutunnel.config.phpgenerado. -
Subí ambos archivos a tu hosting por FTP/SFTP o el file manager, por ejemplo bajo una carpeta como
public_html/floogos/:public_html/└── floogos/├── tunnel.php└── tunnel.config.php -
(Recomendado) Para mayor seguridad, mové
tunnel.config.phpfuera del webroot y apuntá a él desdetunnel.php:require_once '/home/tuusuario/config/tunnel.config.php';
Paso 3 — Verificá que funciona
Sección titulada «Paso 3 — Verificá que funciona»Desde cualquier terminal, enviá una query de prueba (reemplazá la URL y el secret por los tuyos):
curl -s -X POST https://tu-dominio.com/floogos/tunnel.php \ -H "Content-Type: application/json" \ -H "X-Tunnel-Secret: tu-secret" \ -d '{"sql":"SELECT 1 AS ping","params":{}}'Respuesta esperada:
{ "ok": true, "rows": [{ "ping": 1 }], "insertId": null, "rowCount": 1 }Después, en Floogos, creá una credencial Tunnel con la URL de tu tunnel.php y el mismo secret, y ya podés consultar la base de datos de tu hosting desde cualquier workflow.
Modelo de seguridad
Sección titulada «Modelo de seguridad»El túnel aplica 8 capas de seguridad antes de que una query llegue a tu base de datos:
| # | Capa | Qué hace |
|---|---|---|
| 1 | Método | Solo se acepta POST. |
| 2 | Autenticación | X-Tunnel-Secret comparado con hash_equals() (a prueba de timing), retraso aleatorio en fallo. |
| 3 | Whitelist de IP | TUNNEL_ALLOWED_IPS opcional para restringir qué servidores pueden llamar. |
| 4 | Rate limiting | Token bucket por minuto (default 300). |
| 5 | Tamaño del body | Máximo (default 64 KB). |
| 6 | Validación SQL | Bloquea DDL/DCL, multi-statement y keywords peligrosas (ver abajo). |
| 7 | PDO estricto | MULTI_STATEMENTS = false, sql_mode estricto. |
| 8 | Prepared statements | Siempre parametrizado — inmune a SQL injection. |
Todo intento bloqueado queda registrado en el audit log.
Qué queries se permiten
Sección titulada «Qué queries se permiten»| Sentencia | Permitida |
|---|---|
SELECT, INSERT, UPDATE | ✅ Sí (INSERT/UPDATE no en tablas protegidas) |
DELETE | ⚠️ Solo en tablas de lista blanca |
DROP, ALTER, TRUNCATE, CREATE, GRANT, CALL, LOCK | ❌ Siempre bloqueado |
Keywords peligrosas como INTO OUTFILE, LOAD_FILE(, SLEEP(, BENCHMARK(, mysql.user y las queries multi-statement se rechazan. Podés marcar tablas como solo lectura (ej. users, permisos, tokens) para que el túnel nunca pueda escribir en ellas.
Resolución de problemas
Sección titulada «Resolución de problemas»- 403 Forbidden — el secret no coincide, o la IP que llama no está en
TUNNEL_ALLOWED_IPS. - Timeout — verificá que la URL de tu
tunnel.phpsea accesible por HTTPS desde internet. - “Multi-statement no permitido” — quitá el
;del medio de la query. - “DELETE no permitido en tabla X” — agregá la tabla a la lista blanca de DELETE en
tunnel.phpsi el DELETE es legítimo.