Resumen
Las APIs JavaScript del navegador exponen una amplia gama de información del sistema y del navegador. Estas señales pueden interceptarse y modificarse mediante inyección JS a nivel de proxy.
Vectores de API
Navigator API
| Propiedad | Información Filtrada | Falsificable mediante JS |
|---|---|---|
navigator.userAgent |
Cadena navegador/SO | Sí |
navigator.platform |
Plataforma del SO | Sí |
navigator.language |
Idioma principal | Sí |
navigator.languages |
Preferencias de idioma | Sí |
navigator.hardwareConcurrency |
Número de núcleos CPU | Sí |
navigator.deviceMemory |
RAM en GB | Sí |
navigator.maxTouchPoints |
Soporte táctil | Sí |
navigator.webdriver |
Detección de automatización | Sí |
navigator.plugins |
Plugins instalados | Limitado |
navigator.mimeTypes |
Soporte MIME | Limitado |
navigator.cookieEnabled |
Estado de cookies | Sí |
navigator.doNotTrack |
Preferencia de privacidad | Sí |
navigator.pdfViewerEnabled |
Soporte PDF | Sí |
Screen API
| Propiedad | Información Filtrada | Falsificable mediante JS |
|---|---|---|
screen.width |
Resolución de pantalla | Sí |
screen.height |
Resolución de pantalla | Sí |
screen.availWidth |
Ancho disponible | Sí |
screen.availTop |
Posición de ventana | Sí |
screen.colorDepth |
Profundidad de color | Sí |
screen.pixelDepth |
Profundidad de píxel | Sí |
screen.orientation |
Orientación | Sí |
Otras APIs
| API | Información Filtrada | Falsificable mediante JS |
|---|---|---|
Intl.DateTimeFormat().resolvedOptions().timeZone |
Zona horaria | Sí |
performance.now() |
Precisión de temporizador | Sí (reducida) |
Date.now() |
Clock skew | Sí |
navigator.connection |
Tipo de red/RTT | Sí |
navigator.getBattery() |
Nivel de batería | Sí |
navigator.mediaDevices |
Conteo de cámara/mic | Sí |
Estrategia de Falsificación
Mediante JS Inyectado
// Anular propiedades de navigator mediante Object.defineProperty
Object.defineProperty(navigator, 'userAgent', {
get: () => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'
})
Object.defineProperty(navigator, 'platform', {
get: () => 'Win32'
})
Object.defineProperty(navigator, 'hardwareConcurrency', {
get: () => 8
})
Desafíos
-
Temporización: El script inyectado debe ejecutarse antes que los scripts propios de la página. Requiere inyección al principio de
<head>.
Frameworks: Algunos frameworks (Next.js, Angular) usan SSR o scripts inline que se ejecutan antes del JS inyectado.
Service Workers: Los SW pueden interceptar y modificar respuestas antes de la inyección.
-
Detección: Un sitio puede detectar anulaciones verificando
Object.getOwnPropertyDescriptor()o comparando múltiples señales en busca de inconsistencias.
Conclusiones
- ~25 señales de API JS son falsificables mediante inyección JS del proxy
- Requiere inyección cuidadosa en la etapa de análisis HTML
- La temporización es crítica (inyectar antes de cualquier script de página)
- No puede anular todas las APIs (algunas tienen respaldo C++ en el navegador)
- Debe mantener consistencia entre señales (ej., plataforma Win32 + User-Agent Windows)