Al igual que en los pa­sa­po­r­tes, la ex­pe­di­ción de todo Documento Nacional de Identidad español requiere la huella dactilar di­gi­ta­li­za­da de los so­li­ci­ta­n­tes, lo que, en co­m­bi­na­ción con la fo­to­gra­fía, sirve para asignar el documento a sus titulares. Mientras que la co­m­pa­ra­ción clásica de la foto con el aspecto real de la personas implica el riesgo de que un tercero, con rasgos similares y en posesión de tu DNI se haga pasar por ti, el vínculo del documento con la huella dactilar permite acabar con esta pro­ble­má­ti­ca. 

Las browser fi­n­ge­r­pri­nts, en español huellas del navegador, no se di­s­ti­n­guen por una si­n­gu­la­ri­dad de tales ca­ra­c­te­rí­s­ti­cas, pero a la hora de reconocer a los usuarios web ofrecen una tasa de éxito de más del 80 por ciento, incluso a pesar de que el registro de estas huellas digitales (digital fi­n­ge­r­pri­nts) no se lleve a cabo mediante el uso de cookies. Por este motivo, cada vez más, los pro­fe­sio­na­les del marketing y los gestores de páginas web utilizan el análisis del rastro de los na­ve­ga­do­res para el se­gui­mie­n­to de los usuarios y para emplear los re­su­l­ta­dos con objetivos de op­ti­mi­za­ción de la página web y diseñar la pu­bli­ci­dad de manera es­pe­cí­fi­ca.

¿Qué es el browser fi­n­ge­r­pri­n­ti­ng?

Para acceder a los co­n­te­ni­dos de un servidor se necesita un software de cliente. Es así como se recurre, por ejemplo, a un cliente de correo ele­c­tró­ni­co con el objetivo de obtener mensajes del servidor de correo ele­c­tró­ni­co. El acceso al servidor web se logra con los conocidos na­ve­ga­do­res web, como por ejemplo Mozilla Firefox, Safari o Google Chrome. Estas apli­ca­cio­nes solicitan datos de las páginas web mediante el protocolo HTTP para pre­se­n­tar­los a los usuarios en función de sus ne­ce­si­da­des. La tra­n­s­mi­sión de contenido tiene lugar por medio de paquetes IP, los cuales, además de datos útiles, también reciben in­fo­r­ma­ción sobre el cliente y pueden usarlos del lado del servidor para averiguar las huellas del navegador.

En este sentido, se habla entonces de dos tipos de brower fi­n­ge­r­pri­n­ti­n­gs:

  • Fi­n­ge­r­pri­n­ti­ng pasivo: esta forma de fi­n­ge­r­pri­n­ti­ng hace re­fe­re­n­cia a la re­co­pi­la­ción de datos del navegador que no necesita una apli­ca­ción especial. Se trata entonces de in­fo­r­ma­ción que no­r­ma­l­me­n­te se encuentra en los datos de la cabecera de los paquetes IP y que llega al servidor web. A estos datos pe­r­te­ne­cen, por ejemplo, la dirección IP, el puerto utilizado y el tipo de navegador, pero también los ajustes fu­n­da­me­n­ta­les como los tipos de archivo deseados (HTML, XHTML, XML), los conjuntos de ca­ra­c­te­res (p. ej., UTF-8) o los lenguajes (por lo general, los lenguajes del navegador o del sistema operativo). Asimismo, en algunos casos la cabecera HTTP también ofrece in­fo­r­ma­ción sobre el sistema operativo utilizado y sobre la página de pro­ce­de­n­cia.
  • Fi­n­ge­r­pri­n­ti­ng activo: en este caso el navegador consulta de manera es­pe­cí­fi­ca este tipo de datos, ya que estos no se entregan au­to­má­ti­ca­me­n­te al acceder a un recurso de Internet. La consulta tiene lugar, por ejemplo, con apli­ca­cio­nes o plugins de Ja­va­S­cri­pt que im­ple­me­n­tan la fu­n­cio­na­li­dad del navegador, es­pe­cia­l­me­n­te Adobe Flash y Microsoft Si­l­ve­r­li­ght. Entre otros factores, con este pro­ce­di­mie­n­to se puede obtener in­fo­r­ma­ción tanto sobre el sistema operativo como sobre la pantalla (anchura, altura, de­fi­ni­ción) del usuario. Otros datos, sin embargo, aportan in­fo­r­ma­ción, por ejemplo, sobre los tipos de fuente in­s­ta­la­dos o sobre las zonas horarias en las que este se encuentra.

¿Cómo funciona el análisis pasivo de las huellas digitales?

Como ya se ha indicado, las huellas digitales del navegador sirven para ide­n­ti­fi­car a los usuarios con el objetivo de poder re­co­no­ce­r­los po­s­te­rio­r­me­n­te. De esta manera es posible observar cuál es su co­m­po­r­ta­mie­n­to de na­ve­ga­ción para extraer co­n­clu­sio­nes sobre la fu­n­cio­na­li­dad y la usa­bi­li­dad del propio proyecto web o para filtrar contenido pe­r­so­na­li­za­do a los usuarios. A ser posible, el usuario no debería percibir el browser fi­n­ge­r­pri­n­ti­ng, lo que no supone un gran problema en este caso porque los datos se tra­n­s­mi­ten con cada solicitud y solo tienen que al­ma­ce­nar­se del lado del servidor.

La escasa utilidad de las di­re­c­cio­nes IP y de los números de puerto para el browser fi­n­ge­r­pri­n­ti­ng

En realidad, estos datos tra­n­s­mi­ti­dos de manera au­to­má­ti­ca carecen a menudo de valor in­fo­r­ma­ti­vo. En concreto las di­re­c­cio­nes IP, cuyo al­ma­ce­na­mie­n­to resulta pro­ble­má­ti­co por motivos jurídicos, y los puertos TCP uti­li­za­dos, no pueden ser co­n­si­de­ra­dos fu­n­da­me­n­ta­les para las huellas digitales por dos motivos: 1. Asi­g­na­ción dinámica de di­re­c­cio­nes: al co­ne­c­tar­se a Internet, el usuario no obtiene una dirección IP pe­r­ma­ne­n­te y duradera de su proveedor de acceso, sino que cada vez recibe una nueva IP dinámica de la gama de di­re­c­cio­nes IP di­s­po­ni­bles. Una dirección IP concreta solo puede asignarse a un di­s­po­si­ti­vo durante un período de tiempo de­te­r­mi­na­do y el momento exacto en el que el di­s­po­si­ti­vo obtiene una nueva dirección de Internet solo lo conocen el usuario y el proveedor. 2. Netzwork Address Tra­n­s­la­tion (NAT): todavía resulta más difícil cuando entra en juego la tra­du­c­ción de di­re­c­cio­nes de red o NAT. Este pro­ce­di­mie­n­to se utiliza para conectar varios te­r­mi­na­les con una misma dirección IP pública con Internet, de modo que los usuarios comparten dicha dirección IP. Esta es la modalidad que utilizan, por ejemplo, los routers que unifican varios hogares en una misma red de área local, pero también por pro­vee­do­res, que con esta técnica controlan el sector de la telefonía móvil. Así, suele suceder que en los di­s­po­si­ti­vos móviles dos usuarios di­fe­re­n­tes compartan la misma dirección IP. Ambas técnicas de asi­g­na­ción de di­re­c­cio­nes se derivan, sobre todo, de la escasez de di­re­c­cio­nes IPv4 di­s­po­ni­bles. Debido a que se prevé que el sucesor IPv6 solucione este problema en los próximos años, es necesario esperar a ver hasta qué punto se uti­li­za­rán las di­re­c­cio­nes dinámicas y la NAT en el futuro. Los puertos TCP, que utilizan un cliente para la co­mu­ni­ca­ción con el servidor, no resultan tan idóneos como mecanismo de re­co­no­ci­mie­n­to de di­s­po­si­ti­vos. Mientras que el número del puerto de origen se genera de forma aleatoria para cada solicitud, los números de puerto es­tá­n­da­res fijos están de­s­ti­na­dos a los servicios en la red, por lo que todos los clientes utilizan el mismo puerto de destino. Para las so­li­ci­tu­des HTTP a un servidor web se usa, por ejemplo, el puerto TCP 80.

Las cabeceras HTTP entregan los datos im­po­r­ta­n­tes

La cabecera del protocolo HTTP, que se emplea, como se dijo, para la tra­n­s­mi­sión de contenido web, no tiene un tamaño fijo, a di­fe­re­n­cia de las cabeceras TCP e IP. En ella, además de la capacidad para albergar entradas pe­r­so­na­li­za­das, hay varios campos es­ta­n­da­ri­za­dos obli­ga­to­rios, algunos de los cuales son fu­n­da­me­n­ta­les para la creación de las browser fi­n­ge­r­pri­nts. Se trata, sobre todo, de los si­guie­n­tes datos sobre la cabecera:

  • “Referer” (página web de pro­ce­de­n­cia): cuando un usuario llega de la página A a la B por medio de un enlace, el URL de la página A se transmite como referer al servidor de la página B. En de­te­r­mi­na­das ci­r­cu­n­s­ta­n­cias, algunos usuarios llegan desde una página de salida de­te­r­mi­na­da a la página de destino, lo que también resulta de la misma utilidad para la creación de las huellas digitales que el parámetro GET que se encuentra en el URL.
  • “User-Agent” (de­s­cri­p­ción del cliente): el cliente co­rre­s­po­n­die­n­te también entrega una de­s­cri­p­ción de sí mismo en el campo “User-Agent” en cada solicitud. Además del nombre y del número de versión, la cabecera HTTP también facilita un espacio para co­me­n­ta­rios en el que muchos na­ve­ga­do­res es­pe­ci­fi­can cuál es la pla­ta­fo­r­ma su­b­ya­ce­n­te o el sistema operativo.
  • “Accept” (formato de salida permitido): con el campo “Accept”, el navegador informa al servidor acerca del tipo de co­n­te­ni­dos que debe procesar y sobre los formatos de salida que desea. Además de HTML, aquí también entran en escena XHTML (Ex­te­n­si­ble Hypertext Markup Language) y XML (Ex­te­n­si­ble Markup Language). Ante la ausencia de este campo, el cliente soporta todos los tipos de contenido.
  • “Accept-Charset” (conjuntos de ca­ra­c­te­res pe­r­mi­ti­dos): además del formato de salida, el cliente también puede definir el conjunto de ca­ra­c­te­res deseado que el servidor tiene que utilizar a la hora de emitir una respuesta. Este suele hacer re­fe­re­n­cia bien a UTF-8 o bien a la norma ISO/IEC 8859-1.
  • “Accept-Encoding” (formatos de co­m­pre­sión aceptados): para optimizar el tiempo de carga de los proyectos web es habitual comprimir el contenido web antes de su envío. En este sentido, el navegador debe de­s­co­m­pri­mir los datos co­m­pri­mi­dos antes de pre­se­n­tar­los. En el campo “Accept-Encoding” informa al servidor co­n­ta­c­ta­do acerca de los formatos de co­m­pre­sión que soporta. La lista de los pro­ce­di­mie­n­tos llevados a cabo por la IANA incluye, entre otros, gzip, deflate, exi y br.
  • “Accept-Language” (idiomas aceptados): mediante la entrada HTTP “Accept-Language”, los clientes ponen de ma­ni­fie­s­to el idioma que prefieren. Si el idioma elegido está di­s­po­ni­ble para la página web a la que se ha accedido, el servidor web la entregará. El idioma necesario resulta del lenguaje usado por el navegador o por el sistema operativo. Algunos na­ve­ga­do­res también ofrecen la po­si­bi­li­dad de es­pe­ci­fi­car si desean utilizar otros idiomas en los ajustes.

Así funciona el browser fi­n­ge­r­pri­n­ti­ng activo

El fi­n­ge­r­pri­n­ti­ng activo, como su propio nombre indica, tiene lugar cuando el gestor de un proyecto web solicita in­fo­r­ma­ción de manera activa sobre un cliente. Por lo tanto, las ca­ra­c­te­rí­s­ti­cas y datos so­li­ci­ta­dos son rasgos que no se pueden deducir de las cabeceras de los paquetes de cliente. Debido a que para estos fines se tienen que ejecutar apli­ca­cio­nes en las páginas del navegador, el usuario podría en teoría comprobar en todo momento si este analiza los paquetes de datos salientes o el código fuente de HTML o Ja­va­S­cri­pt. En la mayoría de los casos, sin embargo, el proceso permanece oculto para las visitas, al igual que los procesos de se­gui­mie­n­to.

Browser fi­n­ge­r­pri­n­ti­ng activo con elementos Ja­va­S­cri­pt

Para un in­te­r­ca­m­bio más rápido y sin co­m­pli­ca­cio­nes entre el cliente y el servidor es habitual im­ple­me­n­tar el browser fi­n­ge­r­pri­n­ti­ng activo por medio de elementos AJAX (As­y­n­ch­ro­nous Ja­va­S­cri­pt and XML). Esta técnica permite a los usuarios in­ter­ac­tuar con las páginas sin que estas tengan que volverse a cargar co­m­ple­ta­me­n­te ante cada solicitud HTTP. Con este objetivo, se cargan los recursos so­li­ci­ta­dos en un segundo plano mientras que los usuarios pueden seguir vi­sua­li­za­n­do y uti­li­za­n­do el resto de elementos. La in­fo­r­ma­ción obtenida con los scripts co­rre­s­po­n­die­n­tes puede cla­si­fi­car­se en las ca­te­go­rías de datos de navegador y datos de pantalla. Además, el browser fi­n­ge­r­pri­nt puede im­ple­me­n­tar­se con Ja­va­S­cri­pt para obtener in­fo­r­ma­ción sobre la zona horaria y los colores del sistema es­ta­ble­ci­dos.

Datos de navegador di­s­po­ni­bles

Al hablar de las ca­ra­c­te­rí­s­ti­cas que se pueden consultar a través del navegador del usuario, la mayoría de estas consiste en las mismas del fi­n­ge­r­pri­n­ti­ng pasivo. El se­gui­mie­n­to se lleva a cabo con ayuda del objeto navigator, que es una posible ca­ra­c­te­rí­s­ti­ca para los objetos de ventana, es decir, para las ventanas que se abren en el navegador. Aun cuando no se haya definido ninguna norma común para el objeto navigator, este está soportado por los na­ve­ga­do­res ha­bi­tua­les.

Al servidor web se le tra­n­s­mi­ten, entre otros, los si­guie­n­tes datos:

  • navigator.appName: facilita el nombre del navegador, como, por ejemplo, “Opera” o “Netscape”.
  • navigator.ap­p­Ve­r­sion: informa al servidor sobre la versión del navegador y, en algunos casos, sobre el sistema operativo e incluso sobre el tipo de pro­ce­sa­dor. Una posible entrada es, por ejemplo, “5.0 (Windows)”.
  • navigator.coo­kieE­na­bled: con ayuda de la ca­ra­c­te­rí­s­ti­ca coo­kieE­na­bled se puede comprobar si el navegador soporta las cookies (“true”) o si el usuario las ha des­ac­ti­va­do (“false”).
  • navigator.language: con esta ca­ra­c­te­rí­s­ti­ca se puede conocer el lenguaje del navegador. Está soportada por cualquier navegador (Internet Explorer a partir de la versión 11.0, Firefox a partir de 1.0) y se co­rre­s­po­n­de con la entrada HTTP “Accept-Language”. Algunos ejemplos de códigos de lenguaje válidos son “es”, “en” o “de”.
  • navigator.platform: informa sobre la pla­ta­fo­r­ma utilizada por el usuario. Algunos posibles valores son, entre otros, Win32, MacIntel, Linux i686, iPhone, Android y SunOS.
  • navigator.userAgent: el browser fi­n­ge­r­pri­n­ti­ng también puede co­m­pre­n­der una detallada ide­n­ti­fi­ca­ción del navegador. El campo UserAgent no se di­fe­re­n­cia de la in­fo­r­ma­ción homónima de la cabecera HTTP y ofrece valores como el nombre, la versión y la pla­ta­fo­r­ma del navegador. El siguiente ejemplo muestra un posible fragmento: “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0”.

Se­gui­mie­n­to de la in­fo­r­ma­ción de pantalla

Por medio de una ventana de navegador de Ja­va­S­cri­pt se puede obtener in­fo­r­ma­ción sobre la pantalla de los usuarios que visitan una página web. El objeto screen se utiliza como subobjeto, puesto que el objeto navigator no está es­pe­ci­fi­ca­do en un estándar, pero sí lo soportan los na­ve­ga­do­res más ha­bi­tua­les. A este respecto, las ca­ra­c­te­rí­s­ti­cas de la pantalla se tra­n­s­mi­ten al servidor por medio del script co­rre­s­po­n­die­n­te:

  • screen.width: informa sobre la anchura en píxeles de la pantalla del usuario.
  • screen.height: informa al servidor sobre la altura total en píxeles de la pantalla del usuario.
  • screen.avai­l­Wi­d­th: ofrece al usuario la anchura de la pantalla en píxeles. A este valor se le de­s­co­n­ta­rá el ancho de las ca­ra­c­te­rí­s­ti­cas de la interfaz como la barra de tareas del ancho total.
  • screen.avai­lHei­ght: ofrece al usuario la altura de pantalla di­s­po­ni­ble en píxeles. Al igual que en el caso de la anchura, las medidas de las ca­ra­c­te­rí­s­ti­cas de la interfaz se de­s­cue­n­tan del valor total.
  • screen.co­lo­r­De­p­th: la ca­ra­c­te­rí­s­ti­ca co­lo­r­De­p­th revela al servidor cuál es la pro­fu­n­di­dad de color (bit por píxel) que puede utilizar el usuario para vi­sua­li­zar las imágenes. co­lo­r­De­p­th puede equi­pa­rar­se con pi­xe­l­De­p­th, que devuelve el valor de la pro­fu­n­di­dad de color, pero que no todo navegador soporta.

De­te­r­mi­na­ción de la zona horaria y de los colores del sistema

La zona horaria en la que se encuentra un usuario puede es­pe­ci­fi­car­se con ayuda del método Ja­va­S­cri­pt ge­t­Ti­me­zo­neO­f­f­set(). La di­fe­re­n­cia horaria entre el UTC (Universal Coor­di­na­ted Time) y la hora local se ofrece en minutos. Los ajustes del sistema operativo se utilizan como valores de re­fe­re­n­cia. Una sencilla ventana de diálogo de Ja­va­S­cri­pt que im­ple­me­n­ta el método y presenta la di­fe­re­n­cia tiene el aspecto siguiente:

var d = new Date();
alert(d.getTimezoneOffset());

Para el se­gui­mie­n­to de los colores del sistema también es im­pre­s­ci­n­di­ble recurrir a los ajustes del sistema operativo.

Para registrar el diseño se­le­c­cio­na­do por el usuario para los marcos de las ventanas, los botones, etc., la función de Ja­va­S­cri­pt ge­t­Co­m­pu­te­d­S­t­y­le() depende del apoyo de las hojas de estilo CSS (Cascading Style Sheets). El lenguaje de las CSS permite crear elementos de páginas web que se hacen cargo au­to­má­ti­ca­me­n­te de los ajustes de color del usuaruio. Se puede hablar, en este caso, de la selección de colores para estos elementos de sistema:

  • marco de la ventana activa (Ac­ti­ve­Bo­r­der)
  • título de la ventana activa (Ac­ti­ve­Ca­p­tion)
  • fondo de pantalla (Ba­c­k­grou­nd)
  • texto en los botones (Bu­t­to­n­Te­xt)
  • borde de los elementos 3D (Th­ree­DHi­gh­li­ght)

El servidor web recibe los valores de color o los nombres de los colores del sistema co­rre­s­po­n­die­n­tes y pueden in­co­r­po­rar­se en la creación de las huellas digitales.

Consejo

También se puede utilizar la propiedad de CSS font-family para es­pe­ci­fi­car varios posibles tipos de letra para la pre­se­n­ta­ción de los bloques de texto. Si se integra un método Ja­va­S­cri­pt que comprueba cuáles de las fuentes definidas del navegador analizado se pueden devolver, se puede obtener in­fo­r­ma­ción sobre si los tipos de letra co­rre­s­po­n­die­n­tes están in­s­ta­la­dos o no en el sistema del usuario.

Browser fi­n­ge­r­pri­n­ti­ng activo: revisión de los plugins uti­li­za­dos

Los na­ve­ga­do­res web fueron de­sa­rro­lla­dos para vi­sua­li­zar do­cu­me­n­tos HTML sencillos e imágenes in­di­vi­dua­les. Con el paso del tiempo fueron au­me­n­ta­n­do las exi­ge­n­cias a los programas cliente debido a la presencia de proyectos web cada vez más complejos, de modo que, además de formatos mu­l­ti­me­dia como archivos de audio y vídeo, también se han ido es­ta­ble­cie­n­do rá­pi­da­me­n­te elementos in­ter­ac­ti­vos. Para que los na­ve­ga­do­res pudieran re­pro­du­cir estos co­n­te­ni­dos, los de­sa­rro­lla­do­res se vieron obligados a ampliar la gama de funciones de las apli­ca­cio­nes, donde entran en juego los plugins. En este sentido, Ja­va­S­cri­pt sirve de ayuda para analizar los plugins in­s­ta­la­dos y para de­te­r­mi­nar las browser fi­n­ge­r­pri­nts. 

Adobe Shockwave Flash

El plugin más utilizado a nivel mundial es Adobe Shockwave Flash, necesario para re­pro­du­cir ani­ma­cio­nes Flash. Durante años, Flash fue el formato pre­do­mi­na­n­te para los vídeos en la World Wide Web, lo que convirtió a esta im­ple­me­n­ta­ción, que entre otros factores incluye el Flash Player, en un aspecto esencial. A pesar de que gracias a HTML5 existe una al­te­r­na­ti­va seria y segura para presentar y re­pro­du­cir co­n­te­ni­dos visuales, el plugin sigue estando instalado en diversos na­ve­ga­do­res, siendo la mayoría de na­ve­ga­do­res estándar de los di­s­po­si­ti­vos móviles una excepción, ya que estos no ofrecen dicha extensión. A pesar de todo, el escaneo con Adoble Flash, incluido el número de versión, es un elemento im­po­r­ta­n­te para precisar las digital fi­n­ge­r­pri­nts de un navegador. Uno de los scripts que, para estos fines, recurre a la in­s­tru­c­ción “try…catch” y que se puede im­ple­me­n­tar en cualquier parte del proyecto web tiene la siguiente apa­rie­n­cia:

try {
    var obj = new ActiveXObject(’ShockwaveFlash.ShockwaveFlash .6’);
    alert(new ActiveXObject(’ShockwaveFlash.ShockwaveFlash ’).
        GetVariable(’$version ’).replace (/\D+/g, ’.’).match
        (/^.?(.+) ,?$/)[1]);
    } catch(e) {
try {
    if(navigator.mimeTypes["application/x-shockwave -flash"].enabledPlugin) {
        alert(( navigator.plugins["Shockwave Flash 2.0"] ||
        navigator.plugins["Shockwave Flash"]).description.
        replace (/\D+/g, ".").match (/^.?(.+) ,?\$/)[1]);
        }
    } catch(e) {}
}

La apli­ca­ción de Ja­va­S­cri­pt intenta, en primer lugar, crear un nuevo objeto ActiveX (solo funciona en Internet Explorer), que determina y transmite el número de versión en caso de tener éxito. Si el proceso fracasa, el script recurre al objeto mimeTypes, que ya está su­bo­r­di­na­do al objeto navigator pre­se­n­ta­do con an­te­rio­ri­dad, que es capaz de ide­n­ti­fi­car los formatos de archivos y plugins de re­pro­du­c­ción (navigator.plugins) so­po­r­ta­dos por el navegador. En el marco del script utilizado en este caso, se recibe feedback cuando entran en escena Shockwave Flash o Shockwave Flash 2.0.

Microsoft Si­l­ve­r­li­ght

La extensión Si­l­ve­r­li­ght de Microsoft añade al navegador funciones similares a las de Scho­c­k­wa­ve Flash. El plugin para la asi­s­te­n­cia de elementos in­ter­ac­ti­vos está menos extendido, en general, que Adobe Flash y ya hay muchos na­ve­ga­do­res que no lo soportan. Pero esto puede co­n­ve­r­ti­r­se en algo positivo para el browser fi­n­ge­r­pri­n­ti­ng, debido a que un navegador con este plugin puede di­fe­re­n­ciar­se cla­ra­me­n­te de los demás. En este contexto se puede utilizar un script con dos partes para los browser fi­n­ge­r­pri­n­ti­ng tests que primero intenta in­s­ta­n­ciar un objeto ActiveX y, en caso de fallo, in­s­pe­c­cio­na el objeto navigator.plugins:

if (window.ActiveXObject) {
    try {
        var obj = new ActiveXObject(’AgControl.AgControl ’);
        var v = new Array(’ 5.1.50906.0 ’, ’5.1.50905.0 ’, ’5.1.50901.0 ’);
        var i = -1;
        var b = false;
        
        do {
            i++;
            b = obj.isVersionSupported(v[i]);
        } while (!b && i < v.length);
        if (b) {
            alert(v[i]);
        }
    } catch (e) {}
} else {
    var b = false;
    for (var i = 0; i < navigator.plugins.length; i++) {
        if (navigator.plugins[i].name.indexOf(’Silverlight ’) != -1)
        {
        alert(navigator.plugins[i].description);
        b = true;
        }
    }
}

Como dijimos, la primera aparte del script intenta utilizar un objeto ActiveX para informar acerca de Microsoft Si­l­ve­r­li­ght. Con este fin, en el array “v” aparecen de­ta­lla­das las tres versiones actuales (datos de mayo de 2017) del plugin. Este listado es el fu­n­da­me­n­to para la función “is­Ve­r­sio­n­Su­p­po­r­ted”, que emite los valores “true” (correcto) o “false” (in­co­rre­c­to) para la versión co­rre­s­po­n­die­n­te de­pe­n­die­n­do de si el cliente revisado la soporta o no. Si los elementos ActiveX no se soportan, el script analiza el objeto navigator.plugins.

Co­m­pro­ba­ción de todos los plugins in­s­ta­la­dos y de los formatos de archivos so­po­r­ta­dos

Los dos scripts pre­se­n­ta­dos son aptos para el registro de los dos plugins más im­po­r­ta­n­tes y el único modo de de­te­r­mi­nar estas ex­te­n­sio­nes en un usuario. Pero para todos los na­ve­ga­do­res que soportan el objeto navigator.plugins existe otra po­si­bi­li­dad que no solo añade in­fo­r­ma­ción al browser fi­n­ge­r­pri­n­ti­ng sobre Shockwave Flash y Microsoft Si­l­ve­r­li­ght, sino sobre todos los plugins in­s­ta­la­dos en el navegador, de nuevo por medio de la in­s­tru­c­ción “try...catch”:

var a = new Array();
try {
    for (var i = 0; i < navigator.plugins.length; i++) {
        a.push(navigator.plugins[i].name + ’: ’ + navigator.plugins[i].description 
        + ’ (’ + navigator.plugins[i].filename +’)’);
    }
    alert (a.toString ());
} catch (e) {}

Con este script, el subobjeto de navigator, es decir, “plugins”, buscará los plugins in­s­ta­la­dos, incluido el nombre (name), la de­s­cri­p­ción (de­s­cri­p­tion), y el nombre del archivo (filename). 

Siguiendo el mismo pro­ce­di­mie­n­to se pueden analizar todos los formatos so­po­r­ta­dos por el cliente co­rre­s­po­n­die­n­te para el browser fi­n­ge­r­pri­n­ti­ng. A este respecto surgen algunas di­fe­re­n­cias, por ejemplo en distintos di­s­po­si­ti­vos, por lo que los valores obtenidos pueden co­n­tri­buir en muchos casos a la es­pe­ci­fi­ca­ción de las huellas digitales. El script debe recurrir, así, al objeto “mimeTypes” en lugar de al objeto “plugins”:

var a = new Array();
try {
    for (var i = 0; i < navigator.mimeTypes.length; i++) {
        a.push(navigator.mimeTypes[i].type + ’: ’ + navigator.mimeTypes[i].description );
    }
    alert (a.toString ());
} catch (e) {}

De­te­r­mi­nar las fuentes in­s­ta­la­das con ayuda de apli­ca­cio­nes Flash

Ya hemos dicho que con ayuda de las CSS y de Ja­va­S­cri­pt se puede comprobar de manera es­pe­cí­fi­ca qué tipos de letra se han instalado en el sistema operativo del cliente analizado. El co­no­ci­mie­n­to sobre las fuentes exi­s­te­n­tes es in­te­re­sa­n­te por varios motivos que, en parte, van más allá del simple análisis de las huellas digitales. Entre otros, echar un vistazo a los tipos de letra puede arrojar los si­guie­n­tes datos:

  • Análisis del software por medio del que se instalan los re­s­pe­c­ti­vos tipos de letra, como por ejemplo Microsoft Office o Adobe Creative Cloud
  • Análisis del software con el que se crea una fuente propia (p.ej., la de la ca­li­gra­fía personal)
  • Co­n­clu­sio­nes sobre las pre­fe­re­n­cias y los intereses del usuario del cliente, por ejemplo, a causa de los tipos de letra de partidos, de logotipos o de conjuntos de ca­ra­c­te­res temáticos

Esta pequeña lista muestra que este tipo de análisis de los tipos de letra no solo ayuda a es­pe­ci­fi­car las huellas digitales, sino que también es útil para la creación de campañas pu­bli­ci­ta­rias es­pe­cí­fi­cas. En este sentido puede afirmarse que cuanto más conocidas son las fuentes in­s­ta­la­das, mejores re­su­l­ta­dos pro­po­r­cio­nan los análisis. Mientras que con las CSS solo se pueden examinar pasos in­di­vi­dua­les, con las apli­ca­cio­nes Flash (.swf) y con la función de Ja­va­S­cri­pt re­cei­ve­Fo­nts() es posible obtener la lista completa de fuentes y cla­si­fi­car­las. El código necesario del objeto de Flash (Ac­tio­n­S­cri­pt) tiene el siguiente aspecto:

var user_fonts = TextField.getFontList();
getRL(’javascript:receiveFonts ("’ + escape(user_fonts) + ’")’,’_self ’);

La in­te­gra­ción en el documento HTML se realiza con este código, el cual puede in­se­r­tar­se en el campo body:

<object id="flashFont" name="flashFont" type="application/x-shockwave -flash" 
width="1" height="1" data="bfp.swf">
<param name="movie" value="bfp.swf" />
</object >

Estado del inicio de sesión en las redes sociales con el elemento DOM de HTML

Por norma general, los servicios web como las redes sociales requieren que el usuario que acceda a ellas tenga una cuenta de usuario y que haya iniciado sesión con ella. Por el contrario, gran parte de los recursos que ponen a di­s­po­si­ción el servicio pe­r­ma­ne­cen ocultos, un hecho que puede ser de utilidad a la hora de crear browser fi­n­ge­r­pri­nts. Con este objetivo, debe conocerse un recurso del servicio al que solo pueden acceder los usuarios re­gi­s­tra­dos y, asimismo, este debe estar vinculado, en el marco de un elemento DOM, en el proyecto web que se tiene que examinar.

El tipo del elemento es se­cu­n­da­rio, pues los co­m­po­ne­n­tes decisivos, los re­su­l­ta­dos onload() y onerror(), pueden uti­li­zar­se en numerosos co­m­po­ne­n­tes de HTML como por ejemplo <img />,<frame /> oder <script />, donde serán creados cuando los recursos enlazados se carguen o no se puedan cargar, con lo que el servidor web recibirá el aviso co­rre­s­po­n­die­n­te. Un elemento <img> ejemplar que compruebe el estado del inicio de sesión en Twitter puede generarse con la siguiente línea de código, donde se tiene que tener en cuenta que el URL puede mo­di­fi­car­se en cualquier momento:

<img src="https://twitter.com/login?redirect_after_login =%2Fimages %2Fspinner.gif"
onload="alert(’Eingeloggt .’)"
onerror="alert(’Nicht eingeloggt .’)"
style="visibility:hidden" />

Fi­n­ge­r­pri­nt test: aprende a revisar las huellas digitales de tu navegador

La presente guía muestra las amplias po­si­bi­li­da­des de se­gui­mie­n­to que ofrece un browser fi­n­ge­r­pri­n­ti­ng bien diseñado y, en co­n­se­cue­n­cia, lo rápido que se puede reconocer y rastrear a un usuario sin necesidad de cookies. De­te­r­mi­nar la si­n­gu­la­ri­dad de las huellas digitales del propio navegador solo está al alcance de unos pocos, y sin embargo existen diversas he­rra­mie­n­tas web como AmIUnique o Pa­no­p­ti­cli­ck, con las que se puede analizar la si­n­gu­la­ri­dad de las propias browser fi­n­ge­r­pri­nts con un solo clic. Para aportar una mayor claridad y en caso de que quieras analizar tu navegador con la he­rra­mie­n­ta AmIUnique, por ejemplo, accede al servicio a través de la dirección web del mismo nombre, es decir, amiunique.org y pincha en el botón “View my browser fi­n­ge­r­pri­nt”. A co­n­ti­nua­ción se lleva a cabo un análisis corto del navegador web, donde se compara este con más de 370.000 na­ve­ga­do­res (datos de mayo de 2017).

Consejo

El proveedor del servicio (INSA Rennes En­gi­nee­ri­ng School) indica que se almacenan datos anónimos y una cookie válida por cuatro meses en el navegador para detectar posibles al­te­ra­cio­nes en los ajustes en caso de tener que repetir el test.

Acto seguido se obtienen los re­su­l­ta­dos del test en forma de respuesta a la pregunta de si el navegador puede ser rastreado. Además, se obtienen datos po­r­ce­n­tua­les de los tests que se han realizado hasta la fecha con:

  • el mismo tipo de navegador,
  • la misma versión de navegador,
  • el mismo sistema operativo,
  • la misma versión del sistema operativo,
  • el mismo lenguaje de navegador (idioma principal)
  • y la misma zona horaria

En el caso de los primeros valores, se trata de datos únicos que la he­rra­mie­n­ta web comprueba e incorpora en el digital fi­n­ge­r­pri­nt del navegador. Por medio de los botones “Click here” o “View more details” se puede obtener una visión global de todos los datos in­tro­du­ci­dos para de­te­r­mi­nar su ori­gi­na­li­dad. Entre otros factores, la presente guía te ofrece los valores es­pe­ci­fi­ca­dos en la guía digital, tales como los tipos de contenido aceptados, los posibles métodos de co­m­pre­sión, la re­so­lu­ción de la pantalla o la ace­p­ta­ción de las cookies.

¿Cómo se puede evitar el browser fi­n­ge­r­pri­n­ti­ng?

Es imposible esquivar las huellas digitales de los na­ve­ga­do­res de Internet por completo, y es que los gestores de los se­r­vi­do­res web reciben las ca­ra­c­te­rí­s­ti­cas tra­n­s­mi­ti­das au­to­má­ti­ca­me­n­te en la cabecera HTTP durante el fi­n­ge­r­pri­n­ti­ng pasivo. No obstante, se puede intentar reducir al mínimo el valor de re­co­no­ci­mie­n­to del cliente para que las digital fi­n­ge­r­pri­nts no tengan un carácter único e impidan realizar el se­gui­mie­n­to. A este respecto, la solución más simple es recurrir a ex­te­n­sio­nes del navegador, de modo que estas bloqueen co­n­te­ni­dos activos como apli­ca­cio­nes Ja­va­S­cri­pt, Flash o Si­l­ve­r­li­ght y no puedan tra­n­s­mi­tir ningún dato al servidor. Estos plugins, entre los que se en­cue­n­tran NoScript para Firefox o Scri­p­t­Blo­ck para Chrome, también se erigen en opciones de pro­te­c­ción óptimas frente a la cada vez más común técnica del canvas fi­n­ge­r­pri­n­ti­ng. Esta subclase del browser fi­n­ge­r­pri­n­ti­ng realiza el se­gui­mie­n­to del cliente mediante la uti­li­za­ción de elementos canvas, para lo que se aprovecha la ci­r­cu­n­s­ta­n­cia de que la re­n­de­ri­za­ción del texto en estos elementos difiere en gran medida en función del sistema operativo, del navegador, de la tarjeta gráfica, del co­n­tro­la­dor y de las fuentes. Si se activa este tipo de plugins, se debe tener en cuenta que hay algunos servicios web o co­n­te­ni­dos aislados que puede que no funcionen. No obstante, las ex­te­n­sio­nes permiten colocar contenido o páginas web es­pe­cí­fi­cas en listas de filtros para de­s­blo­quear los scripts, lo que no resulta de tanta ayuda cuando como usuario no se tiene la certeza de si el proveedor es fiable o no. Debe co­n­si­de­rar­se, sin embargo, que la uti­li­za­ción de un blo­quea­dor de tales ca­ra­c­te­rí­s­ti­cas co­n­s­ti­tu­ye un elemento im­po­r­ta­n­te del que se puede hacer uso di­re­c­ta­me­n­te para es­pe­ci­fi­car huellas digitales. Aparte de los blo­quea­do­res de scripts, ya solo queda renunciar a la pe­r­so­na­li­za­ción del sistema y del navegador. Es re­co­me­n­da­ble en este caso decidirse por un navegador que se utilice a menudo, por ejemplo Firefox, y recurrir a la co­n­fi­gu­ra­ción pre­de­te­r­mi­na­da, lo que también es de apli­ca­ción para el sistema operativo utilizado. Si renuncias a ex­te­n­sio­nes adi­cio­na­les para tu cliente, esto puede co­n­ve­r­ti­r­se en una buena opo­r­tu­ni­dad, ya que no se generarán huellas únicas y estarás bien preparado para realizar el se­gui­mie­n­to. Por su parte, los usuarios de los sma­r­t­pho­nes, sobre todo de modelos antiguos, gozan de una mayor seguridad gracias al hecho de que para estos no existen muchas po­si­bi­li­da­des de pe­r­so­na­li­za­ción para el navegador y para el sistema.

Ir al menú principal