Youtube.com está intentando extraer datos de lienzo HTML5: ¿Youtube está tratando de identificar el navegador de los usuarios?

5

Al intentar ver un video de Youtube usando el navegador Tor, el navegador Tor abre una ventana de alerta:

This website (www.youtube.com) attempted to extract HTML5 canvas image data, which may be used to uniquely identify your computer.

Should Tor Browser allow this website to extract HTML5 canvas image data?

Captura de pantalla: enlace

Responder a no evitará que se reproduzca el video.

¿Youtube está tratando de hacer huellas dactilares a los visitantes? ¿Qué podemos hacer para ver los videos de Youtube sin permitir la extracción del lienzo HTML5?

    
pregunta supercobra 21.12.2015 - 11:41
fuente

1 respuesta

6

Es probable que no, pero nunca puedes estar seguro.

Primero, ¿por qué un sitio web "intentó extraer datos de imagen de lienzo HTML5"? El elemento lienzo HTML5 permite manipulaciones de imágenes 2D con Javascript. Entre muchas otras operaciones, puede dibujar imágenes o videos al lienzo y luego manipularlos en un nivel de píxel por píxel. Si bien hay muchos usos legítimos para esto, también se puede usar para detectar diferencias sutiles en la forma en que los distintos navegadores web representan imágenes, videos y texto para obtener información sobre el navegador web de los usuarios. Esa información puede ser enviada de vuelta al servidor.

Youtube incluye una gran cantidad de código Javascript, y la mayor parte está muy minificado. Eso hace que auditarlo sea casi imposible. Pero encontré 4 casos de la función .getImageData que se usa para extraer datos de lienzo en el archivo base.js.

a=a.o.getImageData(c,d,e,f).data;for(b=0;b<a.length;+=4)if(255<a[b]+a[b+1]+a[b+2]+a[b+3])return!0;return!1

Esto aparece para verificar el nivel de brillo general de una parte de la imagen y detecta si es "brillante" u "oscuro".

f=e.getImageData(0,0,b,c),k=b*c,l=0;l<k;l++){var m=4*l;f.data[m]=f.data[m+1]=f.data[m+2]=Math.floor(35*Math.random());f.data[m+3]=255}e.putImageData(f,0,0);

Esto reemplaza toda la imagen con ruido gris aleatorio y la vuelve a escribir en el lienzo. Sospecho que es parte del código que crea el fondo para el mensaje de error "este video no se puede mostrar".

b=b.getImageData(0,0,1,1).data;return b[0]==b[2]&&b[1]==b[3]

Esta parte del código aparece dos veces. Comprueba si el primer píxel del lienzo es un color en escala de grises.

Ninguno de estos fragmentos parece sospechoso y parece ser un uso plausible de esta función en el contexto de un reproductor de video. Sin embargo, si echamos un vistazo al desorden reducido y al código que hay, es difícil estar seguro de que no haya ninguna situación en la que filtre información a un servidor. Además, solo porque tengo Javascript con solo estos 4 casos, no significa que obtendrás lo mismo. Podrían enviar diferentes javascript a diferentes usuarios dependiendo de un millón de variables.

    
respondido por el Philipp 21.12.2015 - 12:28
fuente

Lea otras preguntas en las etiquetas