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

# Configuración de seguridad y privacidad

> Configura la recopilación de datos, el filtrado y la privacidad del plugin de WordPress

## Privacidad y cumplimiento

El plugin está diseñado para funcionar con analíticas respetando la privacidad de los usuarios:

* **Sin cookies**: implementación exclusivamente del lado del servidor
* **Sin JavaScript**: sin código de seguimiento del lado del cliente
* **Minimización de datos**: solo metadatos HTTP, sin contenido
* **Ocultación automática**: se eliminan los parámetros sensibles
* **Solo áreas públicas**: se excluyen las áreas de administración y de usuario

<Warning>
  Se recopilan las direcciones IP completas, ya que son esenciales para la detección precisa de bots y el análisis del tráfico. Si tu jurisdicción exige la anonimización de IP, es posible que se necesite configuración adicional.
</Warning>

## Recopilación de datos

El plugin recopila metadatos estándar de las solicitudes HTTP de las páginas públicas:

### Campos obligatorios

Los siguientes campos son **obligatorios** en cada entrada de registro enviada a Agent Analytics:

| Campo | Formato | Longitud máxima | Descripción |
| - | - | - | - |
| `timestamp` | ISO 8601 | - | Marca de tiempo UTC de la solicitud |
| `method` | String | 10 caracteres | Método HTTP (GET, POST, etc.) |
| `host` | String | 255 caracteres | Nombre de host de la solicitud |
| `path` | String | 2048 caracteres | Ruta de la URL (sin cadena de consulta) |
| `status_code` | Integer | 100-599 | Código de estado de la respuesta HTTP |
| `ip` | String | 45 caracteres | Dirección IP del cliente (admite IPv4/IPv6) |
| `user_agent` | String | 1024 caracteres | Cadena del user agent |

<Note>
  Todos los campos obligatorios deben estar presentes para que la ingesta de registros se realice correctamente. Los campos faltantes provocarán errores de validación en la API.
</Note>

### Campos opcionales

Estos campos se incluyen cuando están disponibles, pero no son obligatorios:

| Campo | Formato | Longitud máxima | Descripción |
| - | - | - | - |
| `query_params` | Object | 100 claves | Parámetros de la cadena de consulta (después de la ocultación) |
| `referer` | String | 2048 caracteres | Encabezado HTTP referer |
| `bytes_sent` | Integer | - | Tamaño de la respuesta en bytes |
| `duration_ms` | Integer | - | Tiempo de procesamiento de la solicitud |

<Note>
  El plugin **no** recopila: contenido de las páginas, datos de formularios, información de usuarios de WordPress, actividad de administración, consultas a la base de datos ni ningún dato de la aplicación del lado del servidor.
</Note>

## Filtrado automático de rutas

### Rutas siempre excluidas

Las siguientes rutas se **excluyen automáticamente** del registro y no se pueden anular:

```
wp-admin         # All admin pages and subdirectories
wp-login.php     # Login page
wp-cron.php      # Cron jobs
admin-ajax.php   # Admin AJAX calls
xmlrpc.php       # XML-RPC interface
wp-json/wp/*     # WordPress core REST API
```

<Warning>
  Estas exclusiones usan coincidencia de subcadenas, por lo que funcionan independientemente del directorio de instalación de WordPress (por ejemplo, `/blog/wp-admin/` también se excluye).
</Warning>

### Exclusiones por tipo de solicitud

El plugin omite automáticamente:

* **Solicitudes provenientes de la administración**: cualquier solicitud con un referer que contenga `wp-admin`
* **Llamadas a la REST API**: solicitudes con el parámetro de consulta `rest_route=/wp/*`
* **Operaciones de CLI**: comandos de WP-CLI
* **Contexto de edición**: solicitudes REST con el parámetro `context=edit`

### Prioridad del filtrado de rutas

Las rutas se evalúan en este orden:

1. **Exclusiones integradas** (wp-admin, wp-login.php, etc.)
2. **Rutas denegadas personalizadas** (patrones configurados por el usuario)
3. **Verificación del referer** (solicitudes desde wp-admin)
4. **Verificación de la REST API** (API principal de WordPress)

Gana la primera coincidencia: si alguna verificación coincide, la solicitud se excluye.

## Ocultación de parámetros de consulta

### Parámetros ocultados de forma predeterminada

Las siguientes claves de parámetros de consulta se ocultan automáticamente (se reemplazan por `[REDACTED]`):

```
password    # Password fields
pass        # Alternative password fields
token       # Authentication tokens
secret      # Secret keys
card        # Credit card fields
cc          # Credit card abbreviation
ssn         # Social security numbers
```

<Info>
  La ocultación usa coincidencia de subcadenas. Cualquier parámetro que contenga estas cadenas se ocultará (por ejemplo, `user_password`, `api_token`, `card_number`).
</Info>

### Ejemplo de ocultación

Cadena de consulta original:

```
?username=john&password=secret123&product=widget&api_token=abc123
```

Después de la ocultación:

```json theme={null}
{
  "username": "john",
  "password": "[REDACTED]",
  "product": "widget",
  "api_token": "[REDACTED]"
}
```

## Seguridad del token de ingesta de registros

### Métodos de almacenamiento

El plugin admite tres métodos para configurar el token de ingesta de registros (Log Ingestion Token), en orden de preferencia de seguridad:

<Tabs>
  <Tab title="Variable de entorno (la más segura)">
    Agrégala al entorno de tu servidor:

    ```bash theme={null}
    WP_ENV_AGENT_ANALYTICS_API_KEY=bot_PROFOUND_LOG_INGESTION_TOKEN
    ```

    O en `wp-config.php`:

    ```php theme={null}
    define('WP_ENV_AGENT_ANALYTICS_API_KEY', 'bot_PROFOUND_LOG_INGESTION_TOKEN');
    ```
  </Tab>

  <Tab title="Constante de WordPress">
    Agrégala a `wp-config.php`:

    ```php theme={null}
    define('AGENT_ANALYTICS_API_KEY', 'bot_PROFOUND_LOG_INGESTION_TOKEN');
    ```
  </Tab>

  <Tab title="Base de datos (cifrada)">
    Introdúcela desde la administración de WordPress. La clave:

    * Se cifra con la biblioteca Sodium (si está disponible)
    * Recurre a las salts de WordPress para el cifrado
    * Se almacena en la tabla `wp_options`
    * Se enmascara en la interfaz (solo se muestran los últimos 4 caracteres)
  </Tab>
</Tabs>

<Warning>
  En entornos de producción, usa variables de entorno o constantes. El almacenamiento en la base de datos solo debe usarse para pruebas o cuando el acceso a los archivos está restringido.
</Warning>

## Manejo de direcciones IP

### Orden de detección

El plugin intenta detectar la IP real del cliente en este orden:

1. `HTTP_X_FORWARDED_FOR` - Primera IP de la lista (para proxies/balanceadores de carga)
2. `HTTP_CF_CONNECTING_IP` - Encabezado de IP real de Cloudflare
3. `HTTP_X_REAL_IP` - Encabezado de proxy alternativo
4. `HTTP_TRUE_CLIENT_IP` - Encabezado de Cloudflare Enterprise
5. `REMOTE_ADDR` - Conexión directa (alternativa)

<Info>
  El plugin gestiona automáticamente los proxies inversos que usan los hosts administrados de WordPress (WP Engine, Kinsta, etc.) y las CDN (Cloudflare, Fastly).
</Info>

### Consideraciones de privacidad de IP

* **Sin anonimización**: se capturan las direcciones IP completas para una detección precisa de bots
* **Necesario para el servicio**: los datos de IP son esenciales para el análisis geográfico y las búsquedas DNS inversas
* **Cumplimiento del RGPD**: ten en cuenta tus requisitos legales para la recopilación de datos de IP

## Opciones de configuración

### Configuración general

| Configuración | Valor predeterminado | Descripción |
| - | - | - |
| **Enable Logging** | Desactivado | Interruptor principal para la recopilación de registros |
| **API Endpoint** | `https://artemis.api.tryprofound.com/v1/logs/wordpress` | Destino de los registros |
| **Batch Size** | 500 | Número de registros por envío (50-1000) |
| **Send Interval** | 60 segundos | Frecuencia con la que se procesa la cola (30-600 segundos) |

### Configuración de privacidad

| Configuración | Valor predeterminado | Opciones | Descripción |
| - | - | - | - |
| **Skip Admin** | Activado | Activado/Desactivado | Excluye las solicitudes a `/wp-admin/` |
| **Skip Cron** | Activado | Activado/Desactivado | Excluye las solicitudes de tareas cron |
| **Skip AJAX** | Activado | Activado/Desactivado | Excluye las llamadas AJAX de administración |
| **Skip REST** | Desactivado | Activado/Desactivado | Excluye TODAS las solicitudes a la REST API (no solo las principales) |
| **Redact Query Keys** | `password,pass,token,secret,card,cc,ssn` | Lista separada por comas | Parámetros que se ocultan |

### Configuración avanzada

| Configuración | Valor predeterminado | Descripción |
| - | - | - |
| **Custom Deny Paths** | Vacío | Patrones de rutas separados por saltos de línea (admite comodines) |
| **Max Queue Size** | 100,000 | Número máximo de registros almacenados antes de descartar las entradas antiguas |
| **Retention Days** | 7 | Días que se conservan los registros no enviados |
| **Circuit Breaker Threshold** | 3 | Fallos consecutivos antes de pausar |
| **Circuit Breaker Cooldown** | 30 minutos | Duración de la pausa después de alcanzar el umbral |

## Filtrado de rutas personalizado

### Ejemplos de patrones con comodines

Agrega exclusiones de rutas personalizadas usando estos patrones:

```
/private/*           # Exclude all paths starting with /private/
*/temp/*            # Exclude paths containing /temp/
*.pdf               # Exclude all PDF files
/api/v1/internal/*  # Exclude internal API endpoints
staging.*           # Exclude staging subdomains
```

## Retención de datos

### Retención en el plugin

* **Entradas de la cola**: se eliminan después de un envío exitoso
* **Entradas fallidas**: se reintentan hasta 6 veces con retroceso exponencial
* **Entradas antiguas**: se limpian automáticamente después del período de retención (7 días de forma predeterminada)
* **Cola máxima**: se descartan las entradas más antiguas cuando se alcanza el límite (100,000)

### Procesamiento en la API

* **Registros exitosos**: Agent Analytics los procesa de inmediato
* **Errores de validación**: se registran, pero la entrada igualmente se elimina de la cola
* **Fallos de autenticación**: la cola se pausa y se activa el circuit breaker

## Características de rendimiento

<AccordionGroup>
  <Accordion title="Impacto en las solicitudes">
    * **Sobrecarga de procesamiento**: \< 1 ms por solicitud
    * **Uso de memoria**: mínimo (un solo array por solicitud)
    * **Operaciones de base de datos**: un INSERT por solicitud
    * **Sin búfer de salida**: no retrasa la entrega de la respuesta
  </Accordion>

  <Accordion title="Procesamiento en segundo plano">
    * **Intervalo de envío**: cada 60 segundos (configurable)
    * **Tamaño del lote**: hasta 500 registros por envío (configurable)
    * **Tiempo de espera**: máximo de 5 segundos por lote
    * **Límite de la cola**: máximo de 100,000 entradas
  </Accordion>

  <Accordion title="Funciones de fiabilidad">
    * **Reintento automático**: retroceso exponencial ante fallos
    * **Circuit breaker**: se pausa después de 3 fallos consecutivos
    * **Persistencia de la cola**: los registros se conservan durante las interrupciones
    * **Mecanismo de bloqueo**: evita el procesamiento simultáneo
  </Accordion>
</AccordionGroup>

## Prácticas recomendadas de seguridad

* En sitios de producción, guarda los tokens de ingesta de registros en variables de entorno en lugar de en la base de datos.

* Asegúrate de que todas las áreas sensibles de tu sitio estén excluidas del registro.

* Revisa la pestaña Status con regularidad para asegurarte de que los registros se envían correctamente.

* Usa la función "Send Test Event" para verificar la conectividad sin afectar a los datos reales.

* Asegúrate de que tu sitio de WordPress use HTTPS para proteger los datos en tránsito hacia tu servidor.

<Note>
  Si descubres algún problema de seguridad o necesitas ayuda con la configuración, comunícate de inmediato con [support@tryprofound.com](mailto:support@tryprofound.com).
</Note>
