Skip to main content

OWASP Security Middleware and Utilities for Python APIs

Project description

🛡️ OWASP Security for Python

Un middleware de seguridad para APIs en Python que aplica de forma transversal prácticas recomendadas por OWASP Top 10.
Provee validaciones, headers de seguridad, rate limiting, protección SSRF, correlation IDs y métricas listas para usar.

Compatible con Flask y otras APIs Python modernas.


Características

  • Validación de payloads JSON usando JSON Schema.
  • Protección contra SSRF (validación de hosts permitidos + bloqueo de IP privadas).
  • Rate limiting con rate-limiter-flexible equivalente en Python.
  • Correlation IDs (X-Correlation-Id) automáticos para trazabilidad.
  • Headers de seguridad: HSTS, CSP, X-Frame-Options, etc.
  • Métricas Prometheus vía prometheus-client.

📦 Instalación

  1. Puedes instalar la librería directamente desde PyPI usando pip:

pip install owasp-security

La librería requiere Python 3.9 o superior. Las dependencias incluyen Flask, pydantic, jsonschema, prometheus-client y requests.

🛠️ Componentes y Uso

La librería owasp-security incluye los siguientes componentes de seguridad listos para usar:

1. Middleware de Validación de Esquemas

Valida los payloads JSON de los requests HTTP (métodos POST y PUT) contra un JSON Schema para prevenir ataques de inyección y asegurar la integridad de los datos.

Uso:
```Python

from flask import Flask, jsonify, request
from owasp_security import schema_validation_middleware

# Importa tu JSON schema, por ejemplo, desde un archivo
user_schema = {
  "type": "object",
  "properties": {
    "username": { "type": "string" },
    "age": { "type": "integer", "minimum": 18 }
  },
  "required": ["username", "age"]
}

app = Flask(__name__)

@app.before_request
def validate_payload():
    return schema_validation_middleware(request, user_schema)

@app.route("/users", methods=["POST"])
def create_user():
    # El payload ya está validado
    return jsonify(request.get_json()), 201

if __name__ == "__main__":
    app.run()```

2. Protección contra SSRF (Server-Side Request Forgery)

Proporciona una clase SSRFHttpClient que valida las URLs para prevenir peticiones maliciosas hacia direcciones IP privadas o no autorizadas.

Uso:
```Python

from owasp_security import SSRFHttpClient

# Define una lista blanca de hosts permitidos
allowed_hosts = ["api.example.com", "public-data.com"]
http_client = SSRFHttpClient(allowed_hosts=allowed_hosts)

try:
    response = http_client.get("https://api.example.com/data")
    print(response.text)
except ValueError as e:
    print(f"Error: {e}")

# Este intento fallará, ya que es una IP privada
try:
    http_client.get("http://192.168.1.1/internal-resource")
except ValueError as e:
    print(f"Error: {e}")```

3. Middleware de Rate Limiting

Limita el número de peticiones por minuto por dirección IP para proteger tu API de ataques de fuerza bruta o de denegación de servicio.

Uso:
```Python

from flask import Flask
from owasp_security import RateLimiter

app = Flask(__name__)

# Configura el Rate Limiter con un límite de 60 peticiones por minuto
rate_limiter = RateLimiter(limit_per_minute=60)
rate_limiter.middleware(app)

@app.route("/data")
def get_data():
    return "Este es un recurso limitado", 200

if __name__ == "__main__":
    app.run()```

4. Middleware de Encabezados de Seguridad (Security Headers)

Añade encabezados HTTP de seguridad a las respuestas para prevenir ataques comunes como Clickjacking y XSS.

Uso:
```Python

from flask import Flask
from owasp_security import security_headers_middleware

app = Flask(__name__)
security_headers_middleware(app)

@app.route("/")
def index():
    return "Hola, con encabezados de seguridad!", 200

if __name__ == "__main__":
    app.run()```

5. Generación de ID de Correlación

Añade un ID de correlación único a cada request para facilitar el rastreo y la depuración en los logs de tu aplicación.

Uso:
```Python

from flask import Flask, g
from owasp_security import correlation_id_middleware

app = Flask(__name__)
correlation_id_middleware(app)

@app.route("/")
def index():
    print(f"ID de correlación para este request: {g.correlation_id}")
    return f"Tu ID de correlación es: {g.correlation_id}", 200

if __name__ == "__main__":
    app.run()```

6. Métricas de Seguridad con Prometheus

Proporciona contadores para registrar métricas de seguridad que pueden ser monitoreadas con Prometheus.

Uso:
```Python

from flask import Flask
from owasp_security import SecurityMetrics

app = Flask(__name__)
metrics = SecurityMetrics()```

Por ejemplo, incrementa los contadores cuando una validación falla

def metrics_endpoint():
    return metrics.metrics_endpoint()

if __name__ == "__main__":
    app.run()```

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_owasp_security-0.1.1.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_owasp_security-0.1.1-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file python_owasp_security-0.1.1.tar.gz.

File metadata

  • Download URL: python_owasp_security-0.1.1.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for python_owasp_security-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1178a28a8e2fb32e02e09d0c53ad51a04ec2fcd08b24a1d8ec655bdc1fab9ce0
MD5 5427d59b3e48dd68dfc16f5728598180
BLAKE2b-256 0f2c9841632735f760a629cb8fdcb5db210fcae69b35565279ffddba0b272b5f

See more details on using hashes here.

File details

Details for the file python_owasp_security-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for python_owasp_security-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d6001821b0575631c06e864018ec52e7e06007aa2cb865518869f76861675c09
MD5 dbd5cf58a250f73a714fc9699381f2d9
BLAKE2b-256 765bbfad75998ae728c1312492dee4216fc7a0a4105e0f932dd26db8553a5eb2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page