> ## Documentation Index
> Fetch the complete documentation index at: https://docs.markpdf.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Seguridad

> Cómo proteges tu API key y tus documentos.

# Seguridad

## API key

* Guárdala en una variable de entorno o gestor de secretos.
* No la pongas en el código, en URLs ni en logs.
* Usa una key por entorno y rótala si se filtra.

## URLs firmadas

`POST /convert/from-url` está pensado para URLs **firmadas y de corta duración** de tu storage (S3, Supabase, R2, GCS, Azure):

* Expiran rápido.
* No se almacenan.
* No se imprimen en logs.

## Protección SSRF

Las URLs que envías a `from-url`/`accelerated` se validan antes de descargarlas, y la validación se repite justo antes de conectar (anti DNS-rebinding). Las defensas:

| Control                                  | Variable                          | Por defecto           |
| ---------------------------------------- | --------------------------------- | --------------------- |
| Esquemas permitidos                      | `ALLOWED_FETCH_SCHEMES`           | `https`               |
| Allowlist de hosts (recomendado en prod) | `ALLOWED_FETCH_HOSTS`             | vacío (sin allowlist) |
| Puertos permitidos                       | `ALLOWED_FETCH_PORTS`             | `80,443`              |
| Revalidación antes de conectar           | `FETCH_REVALIDATE_BEFORE_CONNECT` | `true`                |

Además, siempre (configurable o no):

* Se rechazan direcciones internas, loopback, link-local y reservadas (`http://localhost`, `169.254.169.254`, IPs privadas, `[::1]`…), para que la API no pueda usarse como puente hacia redes internas ni hacia el endpoint de metadata del cloud.
* Se rechaza cualquier URL con credenciales embebidas (`user:pass@host`).

<Tip>
  La protección máxima es fijar `ALLOWED_FETCH_HOSTS` con los hosts de tus buckets (p. ej. `tu-cuenta.r2.cloudflarestorage.com`). Con la allowlist activa, solo esos hosts se aceptan y el DNS-rebinding deja de ser posible.
</Tip>

## Tus documentos

* La API convierte y devuelve; no guarda tus documentos.
* Si necesitas caché, usa tu propio storage y el header `ETag`. Ver [Caché y ETag](/docs/public/es/concepts/caching).

<Tip>
  Para conversiones repetidas del mismo documento, aprovecha el `ETag` con `If-None-Match` y ahorra ancho de banda.
</Tip>
