Informe Canvas de BrowserLeaks: señales y límites
Sigue el informe Canvas de BrowserLeaks desde sus comprobaciones hasta el PNG y la consulta de firma; separa esos datos de una identidad o veredicto.
BotBrowser Team
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 mantener coherente un perfil de navegador declarado durante una revisión autorizada de Canvas, pero no puede explicar por sí solo un informe de terceros ni convertirlo en el veredicto de un sitio. La página Canvas de BrowserLeaks reúne evidencias distintas: compatibilidad de API, un resumen de un dibujo fijo, una consulta a sus propios datos de firmas y detalles del archivo PNG. Leer todas las filas como una sola puntuación oculta qué operación produjo cada resultado y qué demostró realmente la página.
TL;DR
- BrowserLeaks comprueba por separado Canvas 2D, el dibujo de texto y la exportación PNG mediante data URL antes de mostrar la sección de firmas.
- Su script público dibuja un patrón fijo de
220×30, codifica un PNG, calcula un digest MD5 a partir de los bytes decodificados y consulta/api/canvas/<digest>. - El porcentaje etiquetado
Uniquenessse calcula concountytotalde la respuesta; la página pública no indica el marco poblacional ni el periodo de recogida. - El tamaño en bytes, el recuento de colores, los fragmentos y los CRC describen la misma imagen generada; no son cuatro identidades independientes del navegador.
- Una consulta sin coincidencia, un digest compartido, un fallo de capacidad o un digest distinto tienen posibles causas diferentes. Ninguno demuestra por sí solo que el navegador sea un bot ni identifica a una persona.
Contenido
- Separar el informe por capas de evidencia
- Seguir el cálculo de la firma
- Interpretar el porcentaje Uniqueness mostrado
- Leer por separado los detalles PNG
- Usar un registro de comparación controlada
- Conclusión práctica
Separar el informe por capas de evidencia
La página agrupa resultados procedentes de operaciones diferentes. Una comprobación de compatibilidad pregunta si una operación está disponible; una consulta de firma pregunta si un dibujo coincide con una clave en la respuesta del servicio. El resumen de fingerprinting Canvas explica cómo el dibujo y la lectura de píxeles pueden generar una señal; BrowserLeaks sitúa junto a esa señal las comprobaciones de compatibilidad, las estadísticas de firmas y la inspección PNG, cada una producida por una ruta distinta del código.
| Área | Operación visible | Conclusión acotada | Lo que no demuestra |
|---|---|---|---|
| Filas de soporte | Contexto Canvas 2D, dibujo de texto y comprobación de toDataURL() PNG | Si esas operaciones concretas superaron sus comprobaciones | Que todas las funciones Canvas estén disponibles o que el navegador sea humano o automatizado |
| Firma | Un dibujo fijo se codifica y sus bytes se reducen a un valor MD5 | La clave que usa esta página para consultar la firma | La identidad de una persona, una cuenta o un identificador universal del navegador |
| Estadísticas | La respuesta contiene count, total y etiquetas de navegador y sistema operativo | Cómo describe la respuesta actual una clave coincidente | La población de origen, el periodo de recogida o una probabilidad de bot |
| Detalles de imagen | Se analizan los colores de píxel y los fragmentos PNG del archivo generado | Propiedades del archivo de este dibujo | Huellas independientes de la firma anterior |
El marcado de la página asigna identificadores distintos a canvas-support-2d, canvas-support-text y canvas-support-todataurl. También separa la firma, el texto de firmas compartidas, el tamaño del archivo, el recuento de colores y la tabla de fragmentos PNG. El código deja así una frontera comprobable entre disponibilidad de una función y una respuesta de conjunto de datos; una interpretación única en verde o rojo borraría esa diferencia.
La fila canvas-support-todataurl no es un diagnóstico completo del fallo. La comparación de estados de exportación Canvas separa data:,, SecurityError síncrono y una alternativa PNG exitosa antes de interpretar el resumen de una imagen.
Esta separación también sirve al comparar suites públicas. Qué comprueban realmente las suites públicas de detección distingue pruebas de página y de conexión leyendo las secciones de cada suite. La página Canvas de BrowserLeaks es una observación de la página: prueba su propio dibujo JavaScript y la exportación de imagen, no TLS, una ruta proxy ni la decisión de una aplicación sobre una cuenta.
Seguir el cálculo de la firma
El canvas.js publicado fija el ancho en 220 y el alto en 30. Dibuja un rectángulo de color y escribe la cadena literal BrowserLeaks,com <canvas> 1.0 en dos posiciones próximas con estilos de relleno distintos. El dibujo cambia también la línea base del texto y la fuente. Esos valores definen la entrada de esta prueba; no son un benchmark universal de Canvas. Otra cadena, disponibilidad de fuentes, pila de renderizado o tamaño definirían otra entrada.
El script solicita después una data URL PNG mediante toDataURL('image/png'). Comprueba que el resultado empiece con el prefijo PNG, decodifica la sección Base64 en bytes, calcula MD5 sobre esos bytes y muestra el digest. Luego consulta /api/canvas/<digest> y usa los campos devueltos para completar las estadísticas. Esos pasos aparecen en la fuente pública; no significan que se haya abierto una sesión de BotBrowser ni que se haya observado un digest ejecutando un navegador.
La cadena tiene límites. Primero, la clave cubre los bytes de un dibujo y una vía de codificación concretos; no resume todas las operaciones Canvas visibles para una página. Segundo, MD5 se usa aquí como clave compacta de consulta; su presencia no cifra la imagen ni garantiza privacidad. Tercero, la respuesta describe los datos del servicio, no la lógica de coincidencia de otro sitio. Un sitio puede usar otros dibujos, combinar señales distintas o no usar Canvas.
La secuencia deducida del código puede registrarse sin guardar la propia imagen:
| Etapa | Registrar | Interpretación limitada |
|---|---|---|
| Página y script | URL y fecha de consulta | La implementación puede cambiar; no traslades una conclusión a una versión no fijada |
| Entrada del dibujo | 220×30, texto, fuente, línea base, colores y posiciones | Si cambia una entrada, no demuestra que cambiara el renderizador |
| Exportación | Si se aceptó la data URL PNG | Es distinto de la disponibilidad de otra API Canvas |
| Digest | Si se mostró un digest, no la imagen original | Es una clave de salida, no un identificador de persona |
| Consulta | Respuesta presente, sin coincidencia o no disponible | Una fila ausente no es una clasificación negativa de automatización |
Otros proyectos generan píxeles con su propia receta. El análisis del ciclo de semillas Canvas de CreepJS sigue una secuencia de valores definida por su fuente; su semilla y número de rondas no sustituyen el dibujo fijo de BrowserLeaks.
Interpretar el porcentaje Uniqueness mostrado
Cuando la API devuelve una entrada coincidente, el script lee count y total. Muestra el porcentaje floor(100 × (100 − 100 × count / total)) / 100 y formatea los valores como “count of total user agents have the same signature”. La aritmética complementa la proporción de coincidencias de la respuesta. No es una probabilidad de que el visitante sea único ni una medida calibrada de cómo una detección de bots puntuará la sesión.
La fuente no indica cómo se muestrearon esos agentes, qué versiones de navegador están representadas, si las entradas se deduplicaron ni cuándo se recogieron los recuentos. Sin esos datos no se puede inferir la representatividad del denominador. La afirmación prudente es “la respuesta actual informa esta fracción para su conjunto registrado de agentes”, no “este navegador es único entre todos los usuarios”. Si no se encuentra la entrada, la página marca la firma como no listada; esa ausencia no demuestra que el renderizado sea raro o nuevo.
Las etiquetas de navegador y sistema operativo también son valores de la respuesta. El código asigna response[digest].browser[0][0] y response[digest].os[0][0] a la página. Describen el registro asociado a la clave, no una lectura directa de un ordenador físico. Pueden orientar sobre cómo el servicio agrupa una firma, pero no verifican el equipo, el perfil, la persona ni la aplicación detrás de la solicitud.
En una revisión de privacidad también importa la solicitud. La página envía el digest a /api/canvas/ para recuperar estadísticas. Un valor en una ruta sigue siendo dato de solicitud y podría aparecer en registros del servidor o telemetría intermedia. Reducir la imagen a un valor corto no vuelve anónima la solicitud. No se debe entregar a una página de diagnóstico pública una imagen de una aplicación sensible ni datos de clientes. La salida usa el dibujo fijo de BrowserLeaks; debe mantenerse separada de los Canvas privados de una aplicación.
Leer por separado los detalles PNG
El panel de imagen inspecciona el mismo PNG que genera el paso de firma. El script muestra una vista previa, informa el tamaño codificado y llama a getImageData(0, 0, 220, 30) para contar los valores de píxel distintos del rectángulo. También pasa los bytes al analizador PNG, que enumera nombres de fragmentos, longitudes, CRC y contenido seleccionado. El marcado llama a estas filas “File Size”, “Number of Colors” y “PNG Headers”.
Estos detalles ayudan a diagnosticar una diferencia de exportación o codificación. Si cambia el tamaño de archivo, la tabla de fragmentos permite revisar el contenedor antes de asumir que cambiaron los píxeles. Si cambia el recuento de colores, puede haber cambiado el dibujo fijo o sus valores de píxel. Pero los metadatos no son pruebas independientes de un segundo rasgo del dispositivo: tamaño, colores, fragmentos y MD5 derivan de la misma imagen. Contarlos como coincidencias separadas multiplicaría una observación en varias señales aparentes.
El estándar de la API describe toDataURL() como una forma de devolver una data URL de la imagen Canvas y documenta condiciones que afectan al resultado, como la limpieza de origen. La fila de BrowserLeaks solo representa su propia comprobación de exportación PNG. No informa todos los motivos de un fallo ni prueba todos los orígenes, imágenes, contextos o políticas. “La exportación de esta página no devolvió la data URL PNG esperada” no equivale a “Canvas está desactivado”.
Usar un registro de comparación controlada
Una comparación repetible necesita guardar la entrada y la versión de la página, no solo una captura de pantalla. Anota la URL de BrowserLeaks, fecha de consulta, compilación del navegador, perfil del sistema operativo, estado de las tres comprobaciones y si la consulta de firma devolvió un registro. Si repites la prueba, conserva las condiciones antes de comparar digest. No cambies perfil, compilación, fuentes, viewport y ruta gráfica a la vez y luego atribuyas el cambio a uno solo.
| Observación | Registrar a continuación | No concluir |
|---|---|---|
| No hay soporte 2D | Compilación, error de página y si se devolvió un contexto | Que no haya dibujo ni fingerprinting Canvas en general |
| Cambia el soporte de texto | Fila exacta y compilación/perfil usados | Que la diferencia sea por sí misma una señal de automatización |
| No se acepta la exportación PNG | Si toDataURL('image/png') devolvió el prefijo esperado y el error visible | Que el navegador no implemente Canvas |
| Hay estadísticas para el digest | count y total informados y fecha de la fuente | Que el porcentaje represente Internet completo o una probabilidad de bot |
| No hay fila de estadísticas | “Sin entrada de respuesta coincidente” y versión de página | Que el digest sea nuevo, único o sospechoso |
| Cambian los detalles PNG | Tamaño, recuento de colores y fragmentos modificados | Que cada campo sea una huella independiente |
Este registro es menor que un perfil de fingerprint completo. Ayuda a reproducir una prueba pública autorizada sin conservar los píxeles originales ni transformar un resultado aislado en un veredicto. Un digest estable bajo condiciones fijas indica que la clave no cambió; demostrar bytes idénticos requiere compararlos byte a byte. Esto no demuestra que todas las superficies de página sean estables. Un digest distinto solo indica que cambió la clave de salida. Antes de asignar una causa, compara las condiciones de la tabla.
Preguntas frecuentes
¿Un digest compartido significa que dos personas son la misma?
No. Significa que el dibujo fijo produjo la misma clave en las observaciones comparadas. Muchos renderizados pueden compartirla, y una persona puede obtener otra salida después de cambiar navegador, fuentes, sistema operativo o renderizado. La consulta del servicio no establece quién hizo la solicitud.
¿El porcentaje mide el anonimato?
No. La fórmula deriva de count y total de la respuesta del servicio. La página pública no describe el marco de muestreo ni el periodo; por tanto, no permite estimar el anonimato de toda la población.
¿BrowserLeaks devuelve una decisión de bot?
La página Canvas muestra soporte, firma y resultado de consulta. El marcado público no expone un veredicto de bot. Otro servicio podría combinar evidencias, pero este informe no lo demuestra.
Cuando no se completa la consulta
El script público separa una entrada ausente de una solicitud fallida. Si no hay entrada para la clave digest, o su valor es not_listed, no completa las estadísticas de firma. Una solicitud rechazada o un error al analizar la respuesta entra en una rama que muestra “Data retrieval error” y ofrece un enlace para reintentar. El evento del enlace evita la navegación predeterminada, muestra el estado de carga y vuelve a ejecutar la comprobación. Son estados del servicio y de la solicitud, no nuevas pruebas de capacidad Canvas.
La comprobación de soporte también tiene lógica acotada. Primero prueba un contexto 2D, después fillText y, por último, si toDataURL('image/png') devuelve una cadena con el prefijo esperado. Si el dibujo de prueba lanza una excepción, el script crea otro Canvas e intenta dibujar de nuevo; un segundo fallo marca la comprobación local como no superada. Las filas visibles no indican qué excepción ocurrió: False solo acota el resultado a esta ruta de código. No determina si la causa fue una política de origen, un error de página, la configuración del navegador o la implementación.
Esta diferencia cambia el siguiente diagnóstico. Ante not_listed, conserva que la consulta no encontró registro y repite el mismo dibujo solo si la pregunta es la reproducibilidad. Ante “Data retrieval error”, comprueba primero que la solicitud y el servicio público respondan. Ante una fila de soporte fallida, anota cuál de las tres comprobaciones falló y la compilación exacta; no sustituyas otra página de pruebas y llames a su resultado una reproducción de BrowserLeaks. Si un reintento funciona, demuestra que la solicitud anterior no terminó, no que cambiara Canvas.
La página también consulta la API con el digest en la ruta. Una revisión de privacidad debe considerar esa solicitud aparte del dibujo local: cuando se ejecuta la consulta, el servidor recibe una clave estable para este patrón concreto. La fuente pública muestra la forma de la ruta, pero no documenta retención, registros ni controles de acceso del servidor. No se debe suponer que el valor solo permanece en el navegador ni que se use para vincular actividad entre sitios; esas afirmaciones necesitan más información que el código visible.
Fuentes públicas
- Página de pruebas Canvas de BrowserLeaks
- Script Canvas de BrowserLeaks
- MDN:
HTMLCanvasElement.toDataURL() - Sección Canvas del estándar HTML WHATWG
- Documentación Canvas de BotBrowser
- Referencia de coherencia de automatización de BotBrowser
Conclusión práctica
Trata la página Canvas de BrowserLeaks como una prueba documentada con salidas separadas: capacidad, imagen generada, consulta de firma e inspección PNG. Conserva el denominador y la fecha de la fuente al hablar del porcentaje, y describe una consulta sin entrada como eso, no como un veredicto. El digest sirve para repetir el dibujo fijo de la página; las etiquetas del servicio no verifican identidad ni deciden si hay acceso automatizado.
Este artículo forma parte de la guía: ¿Qué es la huella digital del navegador?
Artículos Relacionados
Informe WebGL de BrowserLeaks: etapas y datos ausentes
Huella digitalHuella Canvas: exportaciones vacías y errores
Huella digitalInforme WebGL de CreepJS: contextos y señales
Huella digitalResultados de EFF Cover Your Tracks: guía de lectura
Huella digitalQué prueban realmente las suites de detección públicas
Huella digitalDetección de modo sin cabeza en CreepJS: tres veredictos
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.