Volver al Centro de conocimiento
Plataforma

Permisos WebHID y límites de privacidad del dispositivo

Solicita WebHID mediante una acción del usuario, valida colecciones e informes, gestiona desconexiones y limita los metadatos del dispositivo.

BotBrowser Team

Documentación

Quieres la documentación estructurada de Plataforma?

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.

WebHID permite que una página solicite un dispositivo de interfaz humana elegido por la persona, pero el permiso no es un inventario ni prueba de propiedad. BotBrowser puede probar la rama de permiso de la página y su alternativa en un contexto controlado; no fabrica un controlador físico, concede permisos fuera del navegador ni demuestra E/S de hardware. El contrato seguro es explícito: preguntar tras una acción, inspeccionar solo las colecciones necesarias, limitar cada informe, reconciliar desconexiones y mantener la tarea usable sin HID.

Acción de usuario, límite de permiso WebHID, inspección de colecciones, informes limitados, limpieza por desconexión y alternativa

TL;DR

  • navigator.hid.requestDevice({ filters: [{ usagePage: 0x01 }] }) necesita un contexto seguro y activación transitoria del usuario.
  • Una concesión del selector expone un HIDDevice; no demuestra conexión, seguridad, propiedad ni compatibilidad con todas las colecciones.
  • Inspecciona device.collections antes de abrir y trata los bytes de inputreport como datos no confiables.
  • disconnect termina la relación actual; cierra listeners, conserva el trabajo y exige un reintento deliberado.
  • Guarda resultados como granted, unsupported o disconnected, no números de serie ni historial de informes.

Contenido

Preguntar en el punto de uso

WebHID está restringido a contextos seguros y requestDevice() debe ejecutarse durante la activación transitoria. Coloca la petición detrás de un control con nombre claro. La detección de funciones solo indica que existe un método; no abre un selector ni concede acceso. Una política del navegador, un iframe, el sistema operativo o la plataforma puede rechazarla.

async function connectHid() {
  if (!window.isSecureContext || !navigator.hid) return showHidState('unsupported');
  setHidState('requesting');
  try {
    const devices = await navigator.hid.requestDevice({
      filters: [{ usagePage: 0x01, usage: 0x06 }],
    });
    if (devices.length === 0) return showHidState('no-device');
    await openSelectedHid(devices[0]);
  } catch (error) {
    showHidState(error.name === 'NotAllowedError' ? 'denied' : 'failed');
  }
}

connectButton.addEventListener('click', connectHid);

No abras el selector al cargar ni repitas tras una cancelación. Conserva el borrador y ofrece otra petición solo después de una acción nueva. Acceso WebUSB: permisos, interfaces y privacidad separa permiso, apertura, reclamación y limpieza. Permisos Web Bluetooth, elección de dispositivo y privacidad aplica el mismo límite de intención a otro modelo.

Inspeccionar colecciones antes de los informes

Tras elegir, HIDDevice expone metadatos y collections. Abre solo un dispositivo compatible y compara usagePage, usage y descriptores con la operación prevista. Un nombre de producto no autoriza todos los informes ni demuestra identidad, ubicación o proximidad.

Mantén una lista permitida de usos y tamaños de informe. Rechaza una colección incompatible en vez de pedir acceso más amplio. Evita copiar productName, vendorId, productId o serialNumber a URLs, cuentas, analítica o registros habituales: pueden distinguir una unidad aunque nunca se conozca a su propietario.

La colección es una vista viva. El dispositivo puede abrirse y fallar después, cambiar su diseño tras un firmware o desaparecer antes del primer informe. Describe la operación soportada y conserva la página normal si no aparece una colección adecuada.

Limitar informes y reconciliar desconexiones

inputreport entrega bytes del dispositivo elegido. Valida reportId, longitud, rangos y antigüedad antes de cambiar el estado. Define un máximo, rechaza IDs inesperados y limita la frecuencia antes de renderizar o enviar datos.

const MAX_REPORT_BYTES = 64;

function acceptInputReport(event) {
  const bytes = new Uint8Array(event.data.buffer);
  if (bytes.length === 0 || bytes.length > MAX_REPORT_BYTES) return;
  if (event.reportId !== 1 || bytes[0] > 100) return;
  updateControllerState({ reportId: event.reportId, value: bytes[0] });
}

device.addEventListener('inputreport', acceptInputReport);

Registra navigator.hid.addEventListener('disconnect', ...) y haz idempotente la limpieza. Marca la tarea como desconectada antes de esperar close(), elimina listeners, conserva datos y muestra reconexión deliberada. Un informe tardío no debe pintar la página como lista. No reconectes ni envíes automáticamente el último comando.

Minimizar metadatos y conservar una alternativa

Separa permiso, sesión HID y consentimiento de subida. Leer localmente no autoriza enviar a un servidor. Pregunta aparte, describe los campos que salen y deja terminar la tarea local si se rechaza la subida.

Un registro operativo suele necesitar unsupported, denied, no-device, connected, invalid-report o disconnected, además de fecha y entorno probado. Rara vez necesita informes crudos, identificadores estables o un mapa completo de colecciones. Las capturas de diagnóstico deben ser breves, visibles, controladas y eliminadas.

Conserva formulario, valor manual, archivo o configuración estática como alternativa accesible. No bloquees inicio de sesión, facturación, recuperación de cuenta ni contenido requerido por un HID físico.

Clasificar resultados con una tabla

Etapa observadaQué estableceSiguiente acción segura
API ausente, contexto inseguro o políticaWebHID no puede iniciar aquíMantener la tarea sin HID y explicar el límite
Selector cancelado o permiso denegadoNo hubo concesión utilizableConservar borrador y esperar una acción explícita
Dispositivo elegido pero colección incompatibleFalta la capacidad necesariaCerrar, mostrar requisitos y no ampliar filtros
Longitud, ID o rango inválidoEl protocolo rechazó la entradaDescartar, registrar invalid-report y continuar
Evento disconnectTerminó la relación actualQuitar listeners, cerrar y ofrecer reintento deliberado
Informe válido y limitadoSe aceptó un valor de aplicaciónInformar solo ese valor; no inferir identidad

Cada fila debe terminar en un estado comprensible. Un permiso no es conexión, una colección no es confianza y un informe válido no prueba una acción física.

Capacidad y límite de BotBrowser

Los contextos controlados de BotBrowser pueden verificar botón de conexión, detección, filtrado de colecciones, informes limitados, limpieza por desconexión y alternativa sin HID. La documentación de funciones avanzadas describe capacidades revisables en ese contexto. El resultado sigue siendo evidencia de página: BotBrowser no suministra un dispositivo HID, concede permiso del sistema, garantiza un informe ni prueba que alguien posea o toque el controlador.

{
  "api": "navigator.hid",
  "permission": "denied",
  "collectionsAccepted": 0,
  "reportsAccepted": 0,
  "rawIdentifiersRetained": false,
  "physicalDevice": "not-asserted"
}

Repite el fixture al cambiar una variable: versión del navegador, política de contexto seguro, resultado del permiso, filtro o desconexión simulada. Compara la primera divergencia visible sin prometer soporte universal.

BotBrowser permite verificar el botón de conexión, el estado de permiso, el filtrado de colecciones y la limpieza de listeners dentro de un contexto controlado; no aporta el periférico físico ni garantiza un resultado eléctrico. Esa diferencia mantiene la evidencia de página separada de la aceptación de hardware.

BotBrowser puede validar los estados visibles de navigator.hid y su alternativa; BotBrowser no puede proporcionar el dispositivo HID ni confirmar una operación física.

Estados observables

La prueba conserva la secuencia visible y no convierte un resultado de página en una afirmación sobre hardware.

Límites de hardware

La aceptación física necesita un dispositivo aprobado y un entorno separado del fixture de la página.

Fuentes

Conclusión práctica

Usa una acción explícita, inspecciona colecciones soportadas, valida cada informe y cierra listeners al desconectar. Mantén la tarea completa sin HID y registra la etapa del fallo, no identificadores. Repite el fixture tras cambios de navegador, política, firmware o permiso; una prueba de página no promete hardware físico.

#WebHID#Permisos#Privacidad Del Dispositivo#API Del Navegador#BotBrowser

Este artículo forma parte de la guía: Superficies de la plataforma web: mapa de revisión

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.