Los archivos HAR contienen cookies, cabeceras de autenticación y tokens que pueden comprometer la seguridad. Cubre qué rascar y cómo sanitizar antes de...
Un archivo HAR (HTTP Archive) es un registro JSON de cada petición y respuesta HTTP en una sesión del navegador. Cuando grabas un HAR en Chrome DevTools, captura:
El archivo es útil para depurar problemas de red. También es un registro completo de cada credencial que tu navegador envió durante la sesión de grabación.
La cabecera Cookie en las peticiones contiene tokens de sesión, cookies de autenticación, tokens CSRF e identificadores de rastreo. Las cookies de sesión son especialmente peligrosas porque otorgan acceso inmediato a la cuenta de un usuario.
{
"name": "Cookie",
"value": "session_id=abc123def456; csrf_token=xyz789; auth_token=eyJhbGc..."
}
La cabecera Set-Cookie en las respuestas puede contener valores sensibles y banderas:
{
"name": "Set-Cookie",
"value": "session_id=abc123def456; Path=/; HttpOnly; Secure; SameSite=Strict"
}
La cabecera Authorization lleva tokens Bearer, credenciales Basic auth y claves API:
{
"name": "Authorization",
"value": "Bearer eyJhbGciOiJSUzI1NiIs..."
}
{
"name": "Authorization",
"value": "Basic dXNlcjpwYXNzd29yZA=="
}
Basic auth está codificado en base64, no encriptado. El valor decodificado es user:password.
Los cuerpos de peticiones POST y PUT a menudo contienen credenciales:
{
"username": "admin@example.com",
"password": "s3cr3t",
"credit_card": "4111111111111111"
}
Las respuestas de API también pueden devolver datos sensibles en el cuerpo:
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4",
"user": {
"email": "admin@example.com",
"ssn": "123-45-6789"
}
}
Las URLs con tokens en cadenas de consulta aparecen en archivos HAR:
https://api.example.com/auth/callback?code=abc123&state=xyz789&redirect_uri=https://app.example.com
Los códigos de autorización y parámetros de estado en flujos OAuth son sensibles. Pueden reproducirse para completar el flujo de autenticación.
En octubre de 2023, Okta divulgó que un atacante obtuvo acceso a archivos HAR de sesiones de soporte de Okta. Los archivos HAR contenían tokens de sesión que el atacante usó para acceder a tenants de clientes.
La herramienta HAR Viewer puede resaltar campos que probablemente contengan datos sensibles. Busca:
Cookie, Authorization, Set-Cookie, o cualquier cabecera que contenga token, key, secret, password o authcode, token, state, session o keypassword, token, secret, access_token o refresh_tokenAbre el archivo HAR en un editor de texto y reemplaza valores sensibles:
// Antes
{
"name": "Authorization",
"value": "Bearer eyJhbGciOiJSUzI1NiIs..."
}
// Después
{
"name": "Authorization",
"value": "Bearer [REDACTED]"
}
Para cookies, reemplaza el valor completo:
{
"name": "Cookie",
"value": "[REDACTED]"
}
Para sanitización repetida, escribe un script:
import json
SENSITIVE_HEADERS = {"authorization", "cookie", "set-cookie", "proxy-authorization"}
SENSITIVE_QUERY_PARAMS = {"code", "token", "state", "session", "key", "secret"}
def sanitize_har(har_path):
with open(har_path) as f:
har = json.load(f)
for entry in har["log"]["entries"]:
# Rascar cabeceras de petición
for header in entry["request"]["headers"]:
if header["name"].lower() in SENSITIVE_HEADERS:
header["value"] = "[REDACTED]"
# Rascar cabeceras de respuesta
for header in entry["response"]["headers"]:
if header["name"].lower() in SENSITIVE_HEADERS:
header["value"] = "[REDACTED]"
# Rascar parámetros de consulta sensibles
if "queryString" in entry["request"]:
for param in entry["request"]["queryString"]:
if param["name"].lower() in SENSITIVE_QUERY_PARAMS:
param["value"] = "[REDACTED]"
return har
Lista de verificación:
Authorization y rásalasCookie y rásalasSet-Cookie y rásalasBearer, eyJ, password, secret, token)Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.