WEBGL_debug_renderer_info: límites de privacidad y del renderer
Sigue la divulgación opcional del renderer WebGL desde la extensión hasta getParameter sin convertirla en identidad del dispositivo.
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.
WEBGL_debug_renderer_info es una extensión diagnóstica opcional. Puede exponer cadenas de vendor y renderer mediante getParameter(), pero no es una API de identidad. La pregunta útil es qué operación terminó, cuál devolvió null y qué necesitaba realmente la aplicación.
La documentación de BotBrowser describe controles WebGL a nivel de perfil. Esa documentación no convierte una extensión ausente en prueba de una configuración, y un renderer informado no demuestra una GPU física ni una persona. La diferencia importa al leer una superficie de navegador durante una revisión de privacidad o de detección.
TL;DR
getExtension('WEBGL_debug_renderer_info')es un paso distinto de crear el contexto WebGL.- La extensión define
UNMASKED_VENDOR_WEBGLyUNMASKED_RENDERER_WEBGL; sus valores son observaciones, no identidades. null, una excepción, un campo serializado vacío y una cadena informada son estados distintos.- Un valor ausente no identifica una preferencia de privacidad, una familia de navegador ni una decisión de automatización.
- Registra la fase de colección y el resultado de la tarea antes de conservar una cadena sin enmascarar.
Contents
- La extensión es opcional
- La búsqueda y los parámetros son evidencias distintas
- Una cadena renderer tiene un significado limitado
- Un registro comparativo con valores ocultos
- Alcance y límites de BotBrowser
- Practical conclusion
El flujo mantiene separadas las observaciones de la API y las interpretaciones sobre privacidad o identidad.
La extensión es opcional
La especificación de Khronos define constantes diagnósticas adicionales. No sustituye la creación del contexto. Una aplicación puede obtener un WebGLRenderingContext funcional y no recibir el objeto de extensión. Si la creación falla, nunca llegó a consultar la extensión.
MDN describe las dos constantes y señala que una política de privacidad puede afectar la exposición. Es un ejemplo documentado, no una explicación universal de cada ausencia. Si no existe evidencia de política, conserva la rama observada y deja la causa sin resolver.
Un campo omitido por diseño no equivale a que el navegador rechazara la extensión. Una página que nunca hace la búsqueda solo puede registrar not_requested, no extension_unavailable.
La búsqueda y los parámetros son evidencias distintas
getExtension() devuelve un objeto o null cuando el nombre no está disponible en el contexto actual. Responde si esa interfaz opcional estuvo expuesta en ese momento.
getParameter() requiere que exista el objeto y consulta otra frontera. Una excepción, una constante inválida o un serializador que elimina la propiedad pertenece a un campo de error separado. Convertir todo en una cadena vacía destruye la evidencia.
| Estado | Observación mínima | Lo que no demuestra |
|---|---|---|
not_requested | No se intentó la búsqueda | Si el contexto habría estado disponible |
context_unavailable | getContext() no produjo un contexto utilizable | Por qué falló la creación |
extension_unavailable | Un contexto vivo devolvió null | Qué política causó la ausencia |
parameter_missing | El parámetro faltó o fue rechazado | Una configuración de privacidad |
reported | Se obtuvo y registró un valor | Identidad física, personal o de bot |
Son etiquetas del registro de la aplicación, no nuevos valores WebGL. Permiten que el revisor pregunte qué llamada se ejecutó.
Una cadena renderer tiene un significado limitado
El valor es una cadena observada en una superficie y un contexto concretos. Puede ayudar en soporte o compatibilidad, pero no prueba qué GPU física está instalada: capas compartidas y entornos virtualizados pueden presentar el mismo nombre. Tampoco es un identificador de persona ni un veredicto de bot.
No inviertas la implicación. Un valor presente no prueba que todas las protecciones de privacidad estén apagadas; uno ausente no prueba que una protección esté activada. El análisis general de WebGL cubre combinaciones de señales, mientras que el análisis de valores ausentes cubre el ciclo de vida.
En una comparación controlada, conserva canvas, tipo de contexto, versión y fase. Cambia una condición, registra el resultado de la operación y oculta la cadena salvo que el incidente la necesite. “Renderer vacío” no distingue una omisión deliberada de una búsqueda fallida.
Un registro comparativo con valores ocultos
Este artefacto es una propuesta de la aplicación, no una observación de runtime de BotBrowser:
{
"applicationRelease": "support-ui-14",
"context": "webgl2",
"extensionLookup": "reported",
"parameters": { "UNMASKED_VENDOR_WEBGL": "redacted", "UNMASKED_RENDERER_WEBGL": "redacted" },
"taskOutcome": "visualization-complete",
"collectionPhase": "after-context-create",
"rawValueRetention": "not-retained"
}
Conserva la rama y el resultado visible de la tarea. Si la búsqueda devuelve null, cambia el estado y no el resultado de la tarea. Si falla el contexto, registra esa fase anterior. Para análisis anti-bot, una cadena no establece por sí sola la decisión de un detector.
Dos constantes, dos observaciones
La especificación identifica las constantes, pero no define un esquema de analítica. Registra cada lectura como una clave separada: si solo funciona una llamada, no inventes el segundo valor. WebGL 1 y WebGL 2 también deben permanecer separados. Un getContext('webgl2') correcto no demuestra que getContext('webgl') devuelva el mismo contexto o exponga la misma extensión. La referencia de MDN sobre getContext describe conflictos entre modos; son una precondición distinta de la disponibilidad de la extensión.
Una matriz de incidente puede conservar el límite de cada paso:
| Solicitud de contexto | Resultado del contexto | Búsqueda de extensión | Resultado del parámetro | Interpretación segura |
|---|---|---|---|---|
webgl | objeto | objeto | ambas cadenas | Se devolvieron metadatos opcionales en esta fase |
webgl | objeto | null | no intentado | Extensión no disponible; causa sin resolver |
webgl2 | null | no intentado | no intentado | La creación falló antes de obtener evidencia de la extensión |
webgl2 | objeto | objeto | una excepción | Falló la lectura del parámetro; la extensión no está ausente |
webgl | objeto | objeto | campo serializado vacío | Revisar la serialización; no se conoce el valor de API |
La última fila importa en producción: JSON puede omitir undefined, una capa de redacción puede sustituir un valor por "" y la interfaz puede mostrar un marcador. Conserva el estado antes de esas transformaciones. La fase también cambia la comparación. La documentación del evento webglcontextlost de MDN describe una interrupción del ciclo de vida, y isContextLost() consulta ese estado; ninguna llamada demuestra que una extensión esté ausente permanentemente. Etiqueta fases como after-context-create, after-context-restore y fallback-render. No compares como propiedades estables un valor anterior a la pérdida y otro obtenido durante ella. Tras restaurar el contexto, los recursos pueden necesitar recreación y el valor almacenado puede pertenecer a una fase anterior.
Redacción y revisión reproducible
Una pregunta de soporte quizá solo necesite saber qué consulta se ejecutó, si cada constante devolvió una cadena y si se completó el gráfico o la alternativa. Estos campos conservan esa evidencia sin guardar un identificador persistente:
| Campo | Ejemplo | Motivo para conservarlo |
|---|---|---|
contextRequest | webgl2 | Reconstruye el límite de API solicitado |
extensionState | reported | Separa la búsqueda de la creación del contexto |
vendorShape | string | Confirma el tipo sin conservar el valor |
rendererShape | string | Confirma el tipo de la segunda llamada |
taskOutcome | fallback-visible | Separa impacto al usuario del diagnóstico |
phase | after-context-create | Evita mezclar etapas del ciclo de vida |
retention | redacted-after-validation | Hace auditable la decisión de privacidad |
La especificación Khronos fija nombres y contrato de parámetros; MDN explica el comportamiento de métodos. Ninguna fuente demuestra cómo un sitio combina renderer con píxeles, fuentes o señales de red. Antes de modificar un colector, escribe la rama esperada de cada operación y comprueba entradas y resultados observables:
| Comprobación | Entrada constante | Salida observable | Límite de interpretación |
|---|---|---|---|
| Solicitud de contexto | Canvas y nombre solicitado | objeto o null | Solo disponibilidad de creación |
| Búsqueda de extensión | Mismo contexto y nombre exacto | objeto o null | Solo disponibilidad de interfaz opcional |
| Parámetro vendor | Mismo objeto de extensión | cadena, excepción o campo ausente | Un valor diagnóstico |
| Parámetro renderer | Mismo objeto de extensión | cadena, excepción o campo ausente | Otro valor diagnóstico |
| Serialización | Mismo registro en memoria | clave conservada, redactada u omitida | Solo transformación de aplicación |
| Tarea del usuario | Mismo gráfico o alternativa | completada, alternativa o interrumpida | Resultado de producto, no identidad |
Si la segunda fila devuelve null, las filas de parámetros no se ejecutaron; marcarlas como vacías afirmaría una medición inexistente. Para comparar navegador normal y automatización, conserva contexto, extensión y fase. Una configuración declarada puede contrastarse con una rama observada; esa rama no autentica la configuración.
Alcance y límites de BotBrowser
La documentación WebGL de BotBrowser es la fuente de los controles de perfil. Khronos y MDN definen la API web, no el comportamiento del perfil de BotBrowser. Un entorno autorizado puede comprobar que la aplicación registra la rama de forma consistente, pero no garantiza una etiqueta externa ni convierte una ausencia en prueba de automatización.
FAQ
¿null significa que WebGL está desactivado?
No. Se refiere a una extensión opcional; la creación del contexto y la preparación del dibujo son comprobaciones diferentes.
¿La cadena identifica una GPU?
No. Es un valor de API que puede compartirse, virtualizarse o quedar oculto.
¿Debe conservarse en analítica rutinaria?
No automáticamente. Conserva estado, fase y resultado; guarda el valor bruto solo para un soporte explícito y limitado.
Sources
- Khronos: WEBGL_debug_renderer_info
- MDN: WEBGL_debug_renderer_info
- MDN: getExtension()
- MDN: getParameter()
- BotBrowser: WebGL
Practical conclusion
Trata WEBGL_debug_renderer_info como una ruta opcional. Registra por separado la creación, la búsqueda, el parámetro y el resultado de la tarea. Un valor ausente necesita evidencia propia y uno informado necesita una interpretación estrecha; ninguno es identidad.
Este artículo forma parte de la guía: ¿Qué es la huella digital del navegador?
Artículos Relacionados
Renderizador WebGL ausente: privacidad o contexto
Huella digitalInforme WebGL de BrowserLeaks: etapas y datos ausentes
Huella digitalwebgl_debug_renderer_info: qué revela tu GPU a las páginas
Huella digitalRenderizado WebGL por software, capacidades y privacidad
Huella digitalInforme WebGL de CreepJS: contextos y señales
Huella digitalHuella digital WebGPU: la próxima generación de rastreo por GPU
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.