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

# Seguridad

> Prácticas recomendadas de seguridad para desarrolladores de X API

Crear aplicaciones seguras protege tanto a tus usuarios como a la plataforma X. Esta guía cubre las prácticas de seguridad esenciales para desarrolladores de X API.

***

<div id="core-requirements">
  ## Requisitos principales
</div>

<CardGroup cols={2}>
  <Card title="TLS obligatorio" icon="lock">
    Todas las solicitudes a la API deben usar HTTPS. Cualquier solicitud mediante HTTP sin cifrar será rechazada.
  </Card>

  <Card title="Seguridad de credenciales" icon="key">
    Nunca expongas claves o tokens de API en el código del lado del cliente, en los registros ni en los repositorios.
  </Card>
</CardGroup>

***

<div id="protecting-credentials">
  ## Protección de credenciales
</div>

Tus claves y tokens de la API son las llaves de acceso a tu App. Manténlos seguros:

<Steps>
  <Step title="Usa variables de entorno">
    Almacena las credenciales en variables de entorno, no en el código.

    ```bash theme={null}
    export X_API_KEY="your-api-key"
    export X_API_SECRET="your-api-secret"
    ```
  </Step>

  <Step title="Nunca hagas commit de secretos">
    Agrega los archivos de credenciales a `.gitignore`. Usa herramientas como `git-secrets` para evitar commits accidentales.
  </Step>

  <Step title="Rota las claves con regularidad">
    Regenera las claves periódicamente e inmediatamente si sospechas un compromiso de seguridad.
  </Step>

  <Step title="Usa permisos mínimos">
    Solicita solo los permisos de OAuth que tu App realmente necesita.
  </Step>
</Steps>

<div id="if-credentials-are-compromised">
  ### Si se ven comprometidas las credenciales
</div>

1. **Vuelve a generarlas de inmediato** en la [Consola de desarrollador](https://console.x.com)
2. **Revoca los tokens anteriores** — al regenerarlos, se invalidan automáticamente las credenciales anteriores
3. **Revisa el uso** — comprueba si hay actividad de API no autorizada
4. **Actualiza tu aplicación** — despliega las nuevas credenciales en todos los entornos

***

<div id="application-security">
  ## Seguridad de la aplicación
</div>

<div id="input-validation">
  ### Validación de entrada
</div>

Nunca confíes en los datos proporcionados por los usuarios. Valida y sanitiza todos los datos antes de usarlos:

```python theme={null}
# Bad - vulnerable to injection
query = f"from:{user_input}"

# Bueno - validar la entrada primero
import re
if re.match(r'^[a-zA-Z0-9_]{1,15}$', user_input):
    query = f"from:{user_input}"
```

<div id="output-encoding">
  ### Codificación de salida
</div>

Escapa los datos de X API antes de mostrarlos en HTML para evitar XSS:

```javascript theme={null}
// Incorrecto - vulnerable a XSS
element.innerHTML = tweet.text;

// Correcto - escapar HTML
element.textContent = tweet.text;
```

<div id="common-vulnerabilities-to-prevent">
  ### Vulnerabilidades comunes que se deben prevenir
</div>

| Vulnerabilidad     | Prevención                                                                        |
| :----------------- | :-------------------------------------------------------------------------------- |
| **XSS**            | Escapar todo el contenido generado por el usuario antes de renderizarlo           |
| **CSRF**           | Usar tokens anti-CSRF en los formularios; verificar el parámetro `state` de OAuth |
| **SQL Injection**  | Usar consultas parametrizadas, nunca concatenar la entrada del usuario            |
| **Open redirects** | Validar las URLs de callback contra una lista de permitidos                       |

<div id="oauth-security">
  ## Seguridad en OAuth
</div>

<div id="state-parameter">
  ### Parámetro state
</div>

Utiliza siempre el parámetro `state` en los flujos OAuth para evitar ataques CSRF:

```python theme={null}
import secrets

# Generar estado antes de la autorización
state = secrets.token_urlsafe(32)
session['oauth_state'] = state

# Verificar estado después de la devolución de llamada
if request.args.get('state') != session.get('oauth_state'):
    abort(403)  # El estado no coincide - posible CSRF
```

<div id="token-storage">
  ### Almacenamiento de tokens
</div>

| Tipo de token               | Recomendación de almacenamiento                           |
| :-------------------------- | :-------------------------------------------------------- |
| **Tokens de acceso**        | Base de datos cifrada o bóveda segura                     |
| **Tokens de actualización** | Base de datos cifrada con controles de acceso adicionales |
| **Bearer Tokens**           | Variables de entorno o configuración segura               |

***

<div id="secure-development-practices">
  ## Prácticas de desarrollo seguro
</div>

<CardGroup cols={2}>
  <Card title="Auditorías de seguridad" icon="magnifying-glass">
    Realiza revisiones de seguridad y pruebas de penetración de forma regular.
  </Card>

  <Card title="Análisis de dependencias" icon="box">
    Mantén las dependencias actualizadas. Usa herramientas para detectar paquetes vulnerables.
  </Card>

  <Card title="Registro" icon="file-lines">
    Registra los eventos de seguridad, pero nunca registres credenciales ni datos confidenciales.
  </Card>

  <Card title="Supervisión" icon="chart-line">
    Configura alertas para patrones inusuales de uso de la API.
  </Card>
</CardGroup>

***

<div id="reporting-security-issues">
  ## Informar incidentes de seguridad
</div>

Si descubres una vulnerabilidad de seguridad que afecte a X:

<Warning>
  **Infórmala en un plazo de 48 horas.** Los usuarios de X Developer Platform deben notificar a X en un máximo de 48 horas después de sospechar un incidente de seguridad.
</Warning>

<CardGroup cols={2}>
  <Card title="X Bug Bounty" icon="bug" href="https://hackerone.com/twitter">
    Informa de las vulnerabilidades en los sistemas de X a través de HackerOne.
  </Card>

  <Card title="Incidente de tu app" icon="triangle-exclamation" href="https://hackerone.com/twitter">
    Si tu app que usa datos de X se ve comprometida, informa a través del mismo canal.
  </Card>
</CardGroup>

***

<div id="compliance-checklist">
  ## Lista de verificación de cumplimiento
</div>

<Accordion title="Requisitos de seguridad para desarrolladores de X API">
  * [ ] Todas las solicitudes a la API usan TLS/HTTPS
  * [ ] Credenciales almacenadas de forma segura (no en código ni en registros)
  * [ ] Tokens de usuario cifrados en reposo
  * [ ] Validación de entrada en todos los datos proporcionados por el usuario
  * [ ] Codificación de salida para prevenir XSS
  * [ ] Protección CSRF en los flujos de OAuth
  * [ ] Registro de seguridad habilitado (sin datos sensibles)
  * [ ] Plan de respuesta a incidentes documentado
  * [ ] Dependencias actualizadas con regularidad
  * [ ] Se solicitan solo los permisos mínimos de OAuth
</Accordion>

***

<div id="resources">
  ## Recursos
</div>

<CardGroup cols={2}>
  <Card title="Guía de autenticación" icon="key" href="/es/resources/fundamentals/authentication/overview">
    Implementa correctamente OAuth.
  </Card>

  <Card title="Permisos de la App" icon="shield-check" href="/es/resources/fundamentals/developer-apps#app-permissions">
    Configura los permisos mínimos necesarios.
  </Card>
</CardGroup>
