Volver al Centro de conocimiento
Huella digital

FingerprintJS OSS: recopilación y origen del resumen

Sigue load(), el orden de fuentes, los errores de componentes y el resumen perezoso visitorId de FingerprintJS OSS sin afirmar que se ejecutó un detector.

BotBrowser Team

Documentación

Quieres la documentación estructurada de Huella digital?

Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.

BotBrowser puede repetir un fixture autorizado del mismo origen y conservar observaciones acotadas de capacidades, estado de componentes y ruta del resumen, pero no puede ejecutar un detector de terceros, inferir quién es una persona ni demostrar que un proveedor use las mismas señales. Esta revisión de fuentes sigue el commit 7a738d0e9920c7431b34aff24b345a21f9054855 de FingerprintJS OSS a través de src/agent.ts, src/sources/index.ts y src/index.ts.

TL;DR

  • load() tiene monitoring en true de forma predeterminada; monitoring: false omite la solicitud de instalación no personalizada.
  • get() recopila componentes, expone value o error por componente y devuelve un visitorId perezoso.
  • hashComponents() ordena claves de componentes y resume valores canónicos; explica el origen del resultado de la biblioteca, no prueba identidad.
  • El orden importa: las fuentes asíncronas empiezan primero y las de WebGL se ejecutan después de las fuentes que pueden afectar al renderizado.

Contents

SOURCE_ORDER conduce a COMPONENT_STATUS, CANONICAL_HASH, LAZY_VISITOR_ID y un registro de privacidad acotado

Seguir los puntos de entrada públicos

El src/index.ts fijado exporta load, hashComponents, los tipos de componentes y el registro de fuentes. La superficie pública no expone una promesa que devuelva una persona: expone un agente cuyo get() resuelve un resultado estructurado. Conserva el enlace al commit con cada revisión, pues una rama móvil puede reordenar fuentes o cambiar campos.

load() es asíncrona. Puede enviar datos de monitoreo de instalación, espera mediante prepareForSources(), crea el cargador de fuentes integradas y devuelve un agente. El valor predeterminado monitoring = true es un hecho del código fuente. El fixture debe registrar si la opción se fijó explícitamente, no describir el valor predeterminado como un evento de red medido.

Leer la recopilación y el monitoreo

src/agent.ts define LoadOptions.monitoring y especifica que false desactiva una solicitud AJAX no personalizada. La implementación muestrea la ruta de monitoreo y abre m1.openfpcdn.io/fingerprintjs/v${version}/npm-monitoring; esta revisión no afirma que se enviara una solicitud. Una observación segura de fuentes registra la opción, la línea y el propósito documentado. No conserva encabezados de solicitud, cookies, identificadores de cuenta ni una respuesta de terceros.

monitoring: false es una observación de configuración, no una garantía de anonimato. La página aún puede recopilar componentes y la aplicación puede enviar su propia telemetría. Separa la opción de la biblioteca de la política de la aplicación y de los registros del servidor. La documentación de coherencia de automatización de BotBrowser cubre comprobaciones controladas de páginas; no establece qué hace un servicio con un identificador de visitante.

Conservar estados value y error

get() espera al cargador de componentes y devuelve components. El tipo de componente permite value o error, así que una capacidad ausente no equivale a un valor que casualmente sea null. Un fixture acotado puede registrar nombres de componentes, estado (value o error) y forma general del valor. No debe publicar píxeles de Canvas, muestras de audio, datos de cuenta ni todos los valores de componentes.

Por ejemplo, un registro privado puede ser:

{
  "fixtureId": "fpjs-source-01",
  "commit": "7a738d0e9920c7431b34aff24b345a21f9054855",
  "monitoringOption": "false",
  "componentStatus": { "canvas": "value", "fonts": "value", "webGlBasics": "error" },
  "hashAccess": "not-measured",
  "testedOn": "2026-10-29"
}

El registro distingue un error de componente de un componente que tuvo éxito pero cuyo valor se redactó. Así la transferencia de compatibilidad sirve para actuar sin convertir el registro en un perfil reutilizable. Para una comparación relacionada del navegador, consulta verificación de huella del navegador y integridad de API del navegador entre realms.

Conviene distinguir tres casos en un informe. Un componente puede resolverse con un valor utilizable, con un valor vacío o similar a nulo, o rechazar y producir un resultado de error. La redacción añade un cuarto caso: la prueba tuvo un valor pero decidió no conservarlo. Si el registro agrupa esos casos como «ausente», no se puede saber si al navegador le falta la API, si la fuente devolvió un vacío legítimo, si la fuente falló o si la política de privacidad borró el detalle.

El registro de observación también necesita un responsable y una fecha límite de conservación. Mantén los valores brutos de los componentes fuera de los gestores de incidencias generales, de las conversaciones y de las exportaciones analíticas. Si hace falta un artefacto más rico para diagnosticar un defecto, limita el acceso a quienes atienden ese caso y bórralo al terminar la investigación. El registro durable y pequeño debe responder si la prueba se ejecutó y qué resultados gruesos difirieron, no conservar una firma de navegador de larga vida.

Seguir el orden de fuentes y las tareas asíncronas

src/sources/index.ts declara que las fuentes asíncronas van primero para ejecutarse en paralelo con las demás. El registro empieza con userAgentData, fonts, domBlockers, fontPreferences, audio y screenFrame; después incluye canvas, pantalla, almacenamiento, idioma, hardware y fuentes relacionadas con políticas. La lista exacta es un detalle de implementación de este commit, no un estándar universal de huellas de navegador.

El archivo coloca webGlBasics y webGlExtensions al final porque algunas fuentes pueden afectar a otras, incluidas WebGL y Canvas. Por eso el orden forma parte del origen de los datos. Si un commit posterior mueve una fuente, compara primero el commit y el primer componente distinto antes de atribuir un resumen nuevo al cambio del navegador.

La misma disciplina se aplica a los fallos de componentes. Si webGlBasics informa un error, no deduzcas que WebGL esté indisponible de forma global ni que toda la salida posterior deba diferir. Registra el resultado del componente, las condiciones de la prueba y cualquier error directo del navegador que exponga el fixture autorizado. Si no existe una traza de ejecución, etiqueta la explicación como posibilidad basada en la fuente, no como diagnóstico.

Entender el origen del resumen y el visitorId perezoso

hashComponents() ordena las claves de componentes, serializa valores o el literal error, escapa separadores en los nombres de componentes y pasa la cadena canónica a x64hash128. La función explica cómo esta versión de la biblioteca obtiene un resumen del objeto de componentes. No demuestra que la entrada sea única, estable, humana ni aceptada por terceros.

El getter visitorId es perezoso. makeLazyGetResult() calcula la confianza inmediatamente, pero llama a hashComponents(this.components) solo cuando se accede por primera vez y luego guarda el resultado en caché. Una prueba que nunca lee visitorId no recorrió la ruta del resumen. Una prueba que lo lee dos veces comprueba la reutilización de caché, no dos recopilaciones independientes. Registra hashAccess como not-measured, first-read o reused en vez de inventar una conclusión de ejecución.

La confianza es un campo distinto del identificador y debe interpretarse según el significado que documenta la implementación. No es una probabilidad calibrada de que un resultado pertenezca a una persona, ni una puntuación que garantice que un servicio lo acepte. Mantén separados en las notas el cálculo y la propiedad perezosa, para no describir una lectura inmediata de la confianza como prueba de que se accedió al identificador.

Crear una observación acotada de la fuente

El siguiente comando obtiene el código fijado e imprime solo líneas estructurales. Es una observación de fuente pública, no una ejecución de BotBrowser ni una solicitud a un sitio protegido:

curl -fsSL https://raw.githubusercontent.com/fingerprintjs/fingerprintjs/7a738d0e9920c7431b34aff24b345a21f9054855/src/agent.ts | rg -n 'monitoring = true|hashComponents\(this.components\)|const components = await getComponents|request.open'

Una línea coincidente confirma que el commit contiene esos marcadores de implementación. No demuestra que un navegador los ejecutara. Para pruebas de ejecución, guarda versión del navegador, SO, ciclo de vida del perfil, origen, opción, estado de componentes, acceso al resumen y fecha en un registro restringido. Cambia una entrada declarada cada vez.

Definir el límite de privacidad

La guía de fingerprinting del W3C trata la huella como una cuestión de privacidad; el glosario de MDN sobre fingerprinting explica el concepto general. Este artículo añade origen de fuentes y reglas de redacción; no afirma que FingerprintJS OSS sea un detector completo ni que visitorId identifique a una persona.

Separa las preguntas de compatibilidad y privacidad. Un error de componente puede explicar un mecanismo alternativo de la aplicación sin justificar la recopilación de valores brutos. Si una comprobación de versión solo necesita presencia, estado y acceso al resumen, conserva esos campos y elimínalos pronto. Si importa una decisión del servicio, obtén un resultado de integración autorizado en vez de extrapolar desde esta revisión de fuentes.

Una revisión práctica de minimización plantea cuatro preguntas antes de ejecutar una prueba. ¿Qué afirmación exige cada campo? ¿Se puede responder con un estado o una forma en lugar del valor? ¿Quién puede ver el artefacto? ¿Cuándo se borrará? Si un campo no responde a la primera pregunta, omítelo. Si basta un estado, no recojas un valor de alto detalle «por si acaso». Incluye la fecha de conservación en la tarea de prueba y no la dejes como recordatorio posterior.

No presentes una lectura de implementación como conclusión de cumplimiento. El código puede ayudar a situar una ruta de recopilación y una opción de configuración, pero las obligaciones legales dependen del contexto, la finalidad, la jurisdicción, el consentimiento y la aplicación completa. Una revisión de privacidad debe partir del despliegue real y de sus flujos de datos. Este artículo se limita a explicar la fuente citada y a proponer un registro de diagnóstico más pequeño.

Practical conclusion

Fija el commit, distingue la configuración monitoring de la evidencia de red en ejecución, conserva por separado value y error, y registra si se accedió al resumen perezoso. El orden de las fuentes y el resumen canónico explican la procedencia; no establecen identidad, entropía, anonimato ni una decisión de terceros.

Sources

Next reading

Consulta verificación de huella del navegador para comprobaciones de páginas propias e integridad de API del navegador entre realms cuando una misma propiedad se lea desde varios contextos.

#FingerprintJS#Browser Fingerprinting#visitorId#privacidad#Source Provenance

Este artículo forma parte de la guía: ¿Qué es la huella digital del navegador?

Lleva BotBrowser de la investigación a producción

Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.