¿Cómo identifico de manera única las computadoras que visitan mi sitio web?

184

Necesito encontrar una manera única de identificar cada computadora que visita el sitio web que estoy creando. ¿Alguien tiene algún consejo sobre cómo lograr esto?

Como quiero que la solución funcione en todas las máquinas y todos los navegadores (dentro de lo razonable) estoy tratando de crear una solución usando javascript.

Las cookies no lo harán.

Necesito la capacidad de crear básicamente un guid que sea exclusivo de una computadora y que se pueda repetir, suponiendo que no se hayan producido cambios de hardware en la computadora. Las direcciones en las que estoy pensando son obtener el MAC de la tarjeta de red y otra información de esta naturaleza que identificará la máquina que visita el sitio web.

eso es valioso
fuente
44
No puede obtener el mac de su tarjeta de red: la IP no contiene esa información, lo mejor que puede obtener es la dirección IP de su puerta de enlace ISP. Para algunos ISP, eso podría ser lo mismo para todos los usuarios en una ciudad determinada.
Martin Beckett
1
El hecho de que no desea que el usuario pueda falsificarlo. La respuesta es, por supuesto, que esto no se puede hacer sin algún componente privilegiado suyo instalado en la máquina del usuario.
AnthonyWJones
Las direcciones MAC son trivialmente fáciles de falsificar. Mi pequeña conexión inalámbrica horrible pasará a través de su MAC, sustituirá la suya o usará la que especifique.
Kent Brewster
Esto no se puede hacer - las cookies son su mejor
opción
Por favor lea mi respuesta en esta página. Tengo una muy buena idea para este problema :)
Mahdi Jazini

Respuestas:

58

Estas personas han desarrollado un método de huellas digitales para reconocer a un usuario con un alto nivel de precisión:

https://panopticlick.eff.org/static/browser-uniqueness.pdf

Investigamos el grado en que los navegadores web modernos están sujetos a "huellas digitales del dispositivo" a través de la información de versión y configuración que transmitirán a los sitios web a pedido. Implementamos un posible algoritmo de huellas digitales y recolectamos estas huellas digitales de una gran muestra de navegadores que visitaron nuestro lado de prueba, panopticlick.eff.org. Observamos que la distribución de nuestra huella digital contiene al menos 18.1 bits de entropía, lo que significa que si elegimos un navegador al azar, en el mejor de los casos, esperamos que solo uno de los 286,777 navegadores compartan su huella digital. Entre los navegadores que admiten Flash o Java, la situación es peor, ya que el navegador promedio lleva al menos 18.8 bits de información de identificación. El 94,2% de los navegadores con Flash o Java fueron únicos en nuestra muestra.

Al observar a los visitantes que regresan, estimamos la rapidez con que las huellas digitales del navegador pueden cambiar con el tiempo. En nuestra muestra, las huellas digitales cambiaron bastante rápido, pero incluso una simple heurística fue capaz de adivinar cuando una huella digital era una versión "mejorada" de la huella digital de un navegador previamente observado, con un 99.1% de conjeturas correctas y una tasa de falsos positivos de solo 0.86% .

Discutimos qué amenazas de privacidad plantea la huella digital del navegador en la práctica, y qué contramedidas pueden ser apropiadas para evitarlo. Existe una compensación entre la protección contra la huella dactilar y ciertos tipos de depuración, que en los navegadores actuales tiene un gran peso contra la privacidad. Paradójicamente, las tecnologías de privacidad antihuellas pueden ser contraproducentes si no son utilizadas por un número suficiente de personas; mostramos que algunas medidas de privacidad actualmente son víctimas de esta paradoja, pero otras no ...

Jonathan
fuente
14
Soy desarrollador, vine aquí para buscar una solución rápida o un pequeño fragmento de código. Este documento no muestra cómo implementarlo. Quiero saber cómo implemento esto para poder rastrear usuarios únicos para mi sitio.
Oliver
10
@ Oliver Estás en lo correcto. Esto no te da la respuesta en un plato. Requiere una mayor lectura, comprensión de todos los problemas involucrados y por qué es poco probable que un fragmento de código simple funcione por completo. Un desarrollador emprendedor podría escribir una biblioteca que haga todo el trabajo duro y permitir que las personas que buscan una "solución rápida" se beneficien en el futuro.
Jonathan
2
La respuesta también es solo de enlace. Se agradecería un resumen de las técnicas descritas en el PDF en caso de que el PDF no esté disponible.
Damian Yerrick
2
Vea mi respuesta aquí para obtener un paquete de código abierto y una manera fácil de implementar la huella digital stackoverflow.com/a/47536192/3650835
KayakinKoder
Así que mejor hago una "galleta" resistente con un gran número aleatorio: D
Luis Mauricio
49

Introducción

No sé si existe o alguna vez habrá una manera de identificar máquinas de manera única utilizando solo un navegador. Las razones principales son:

  • Deberá guardar datos en la computadora del usuario. El usuario puede eliminar estos datos en cualquier momento. A menos que tenga una manera de recrear esta información que es única para cada máquina, entonces está atascado.
  • Validación. Debe protegerse contra la suplantación de identidad, el secuestro de sesión, etc.

Incluso si hay formas de rastrear una computadora sin usar cookies, siempre habrá una forma de evitarla y un software que lo hará automáticamente. Si realmente necesita rastrear algo basado en una computadora, tendrá que escribir una aplicación nativa (Apple Store / Android Store / Windows Program / etc).

Es posible que no pueda darle una respuesta a la pregunta que hizo, pero puedo mostrarle cómo implementar el seguimiento de la sesión. Con el seguimiento de sesión, intenta realizar un seguimiento de la sesión de navegación en lugar de que la computadora visite su sitio. Al rastrear la sesión, el esquema de su base de datos se verá así:

sesssion:
  sessionID: string
  // Global session data goes here

  computers: [{
     BrowserID: string
     ComputerID: string
     FingerprintID: string
     userID: string
     authToken: string
     ipAddresses: ["203.525....", "203.525...", ...]
     // Computer session data goes here
  }, ...]

Ventajas del seguimiento basado en sesión:

  1. Para los usuarios registrados, siempre puede generar el mismo ID de sesión de los usuarios username/ password/ email.
  2. Todavía puede rastrear usuarios invitados usando sessionID.
  3. Incluso si varias personas usan la misma computadora (es decir, cibercafé), puede rastrearlas por separado si inician sesión.

Desventajas del seguimiento basado en sesión:

  1. Las sesiones se basan en el navegador y no en la computadora. Si un usuario usa 2 navegadores diferentes, dará como resultado 2 sesiones diferentes. Si esto es un problema, puede dejar de leer aquí.
  2. Las sesiones caducan si el usuario no ha iniciado sesión. Si un usuario no ha iniciado sesión, utilizará una sesión de invitado que se invalidará si el usuario elimina las cookies y la memoria caché del navegador.

Implementación

Hay muchas formas de implementar esto. No creo que pueda cubrirlos a todos, solo enumeraré mi favorito, lo que haría que esta sea una respuesta obstinada . Tenlo en cuenta.

Lo esencial

Seguiré la sesión usando lo que se conoce como una cookie para siempre. Estos son datos que se recrearán automáticamente incluso si el usuario elimina sus cookies o actualiza su navegador. Sin embargo, no sobrevivirá al usuario eliminando sus cookies y su caché de navegación.

Para implementar esto, utilizaré el mecanismo de almacenamiento en caché de los navegadores ( RFC ), la API de WebStorage ( MDN ) y las cookies del navegador ( RFC , Google Analytics ).

Legal

Para utilizar identificadores de seguimiento, debe agregarlos tanto a su política de privacidad como a sus términos de uso, preferiblemente bajo el subtítulo Seguimiento . Utilizaremos las siguientes teclas en ambos document.cookiey window.localStorage:

  • _ga : datos de Google Analytics
  • __utma : cookie de seguimiento de Google Analytics
  • sid : SessionID

Asegúrese de incluir enlaces a su Política de privacidad y términos de uso en todas las páginas que usan seguimiento

¿Dónde guardo los datos de mi sesión?

Puede almacenar los datos de su sesión en la base de datos de su sitio web o en la computadora del usuario. Como normalmente trabajo en sitios más pequeños (deje que más de 10 mil conexiones continuas) que usen aplicaciones de terceros (Google Analytics / Clicky / etc.), es mejor para mí almacenar datos en la computadora del cliente. Esto tiene las siguientes ventajas:

  1. Sin búsqueda de base de datos / gastos generales / carga / latencia / espacio / etc.
  2. El usuario puede eliminar sus datos cuando lo desee sin la necesidad de escribirme correos electrónicos molestos.

y desventajas:

  1. Los datos tienen que estar encriptados / desencriptados y firmados / verificados, lo que crea una sobrecarga de la CPU en el cliente (no tan mal) y el servidor (¡bah!).
  2. Los datos se eliminan cuando el usuario elimina sus cookies y caché. (esto es lo que realmente quiero)
  3. Los datos no están disponibles para el análisis cuando los usuarios se desconectan. (análisis solo para usuarios que actualmente navegan)

UUIDS

  • BrowserID : Identificación única generada a partir de la cadena del agente de usuario de los navegadores.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : generado a partir de la dirección IP de los usuarios y la clave de sesión HTTPS. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : huella digital basada en JavaScript basada en una huella digital modificada.js .FingerPrint.get()
  • SessionID : clave aleatoria generada cuando el usuario visita el sitio por primera vez.BrowserID|ComputerID|randombytes(256)
  • GoogleID : generado a partir de __utmacookies.getCookie(__utma).uniqueid

Mecanismo

El otro día estaba viendo el show de Wendy Williams con mi novia y estaba completamente horrorizado cuando el anfitrión le aconsejó a sus espectadores que eliminaran el historial de su navegador al menos una vez al mes. Eliminar el historial del navegador normalmente tiene los siguientes efectos:

  1. Elimina el historial de los sitios web visitados.
  2. Elimina cookies y window.localStorage(aww man).

La mayoría de los navegadores modernos hacen que esta opción esté fácilmente disponible, pero no temas a tus amigos. Porque hay una solución. El navegador tiene un mecanismo de almacenamiento en caché para almacenar secuencias de comandos / imágenes y otras cosas. Por lo general, incluso si eliminamos nuestro historial, este caché del navegador aún permanece. Todo lo que necesitamos es una forma de almacenar nuestros datos aquí. Hay 2 métodos para hacer esto. La mejor es usar una imagen SVG y almacenar nuestros datos dentro de sus etiquetas. De esta manera, los datos aún se pueden extraer incluso si JavaScript está deshabilitado con flash. Sin embargo, dado que es un poco complicado, demostraré el otro enfoque que usa JSONP ( Wikipedia )

example.com/assets/js/tracking.js (realmente tracking.php)

var now = new Date();
var window.__sid = "SessionID"; // Server generated

setCookie("sid", window.__sid, now.setFullYear(now.getFullYear() + 1, now.getMonth(), now.getDate() - 1));

if( "localStorage" in window ) {
  window.localStorage.setItem("sid", window.__sid);
}

Ahora podemos obtener nuestra clave de sesión en cualquier momento:

window.__sid || window.localStorage.getItem("sid") || getCookie("sid") || ""

¿Cómo hago que tracking.js se pegue en el navegador?

Podemos lograr esto usando los encabezados HTTP Cache-Control , Last-Modified y ETag . Podemos usar el SessionIDvalor as para el encabezado etag:

setHeaders({
  "ETag": SessionID,
  "Last-Modified": new Date(0).toUTCString(),
  "Cache-Control": "private, max-age=31536000, s-max-age=31536000, must-revalidate"
})

Last-ModifiedEl encabezado le dice al navegador que este archivo básicamente nunca se modifica. Cache-Controlle dice a los proxies y gateways que no almacenen en caché el documento, pero le dice al navegador que lo guarde en caché durante 1 año.

La próxima vez que el navegador solicite el documento, lo enviará If-Modified-Sincey los If-None-Matchencabezados. Podemos usar estos para devolver una 304 Not Modifiedrespuesta.

example.com/assets/js/tracking.php

$sid = getHeader("If-None-Match") ?: getHeader("if-none-match") ?: getHeader("IF-NONE-MATCH") ?: ""; 
$ifModifiedSince = hasHeader("If-Modified-Since") ?: hasHeader("if-modified-since") ?: hasHeader("IF-MODIFIED-SINCE");

if( validateSession($sid) ) {
  if( sessionExists($sid) ) {
    continueSession($sid);
    send304();
  } else {
    startSession($sid);
    send304();
  }
} else if( $ifModifiedSince ) {
  send304();
} else {
  startSession();
  send200();
}

Ahora, cada vez que el navegador solicite, tracking.jsnuestro servidor responderá con un 304 Not Modifiedresultado y forzará una ejecución de la copia local de tracking.js.

Aún no lo entiendo. Explícamelo

Supongamos que el usuario borra su historial de navegación y actualiza la página. Lo único que queda en la computadora del usuario es una copia de la tracking.jsmemoria caché del navegador. Cuando el navegador lo solicita tracking.js, recibe una 304 Not Modifiedrespuesta que hace que ejecute la primera versión tracking.jsrecibida. tracking.jsejecuta y restaura lo SessionIDque fue eliminado.

Validación

Supongamos que Haxor X roba las cookies de nuestros clientes mientras todavía están conectados. ¿Cómo los protegemos? Criptografía y huellas digitales del navegador al rescate. Recuerde que nuestra definición original SessionIDera:

BrowserID|ComputerID|randomBytes(256)

Podemos cambiar esto a:

Timestamp|BrowserID|ComputerID|encrypt(randomBytes(256), hk)|sign(Timestamp|BrowserID|ComputerID|randomBytes(256), hk)

Donde hk = sign(Timestamp|BrowserID|ComputerID, serverKey).

Ahora podemos validar nuestro SessionIDuso del siguiente algoritmo:

if( getTimestamp($sid) is older than 1 year ) return false;
if( getBrowserID($sid) !== createBrowserID($_Request, $_Server) ) return false;
if( getComputerID($sid) !== createComputerID($_Request, $_Server) return false;

$hk = sign(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid), $SERVER["key"]);

if( !verify(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid) + decrypt(getRandomBytes($sid), hk), getSignature($sid), $hk) ) return false;

return true; 

Ahora para que el ataque de Haxor funcione, deben:

  1. Tener lo mismo ComputerID. Eso significa que tienen que tener el mismo proveedor de ISP que víctima (Tricky). Esto le dará a nuestra víctima la oportunidad de emprender acciones legales en su propio país. Haxor también debe obtener la clave de sesión HTTPS de la víctima (Hard).
  2. Tener lo mismo BrowserID. Cualquiera puede falsificar la cadena de agente de usuario (molesto).
  3. Ser capaz de crear su propio falso SessionID(Muy difícil). Los ataques de volumen no funcionarán porque usamos una marca de tiempo para generar la clave de cifrado / firma, así que básicamente es como generar una nueva clave para cada sesión. Además de eso, ciframos bytes aleatorios, por lo que un simple ataque de diccionario también está fuera de discusión.

Podemos mejorar la validación mediante el reenvío GoogleIDy FingerprintID(a través de ajax o campos ocultos) y la comparación con esos.

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;
Walter
fuente
1
Esta es una hermosa respuesta por cierto. Tanta información Me sorprende que no tengas más votos a favor. Sinceramente, no puedo creer que exista la técnica con svgs y jsonp, pero debe hacerlo. ¿No hay una biblioteca que recurra a dicha técnica cuando las cookies / localStorage / sessionStorage están deshabilitadas?
faceyspacey.com
Además, me pregunto si hay una versión avanzada de esto para usar simplemente su archivo caché tracking.js (o varios de esos archivos) para usarlo esencialmente como almacenamiento local / cookies, es decir, para recordar muchos datos. La idea sería que una biblioteca tenga métodos como storageFacade.setItemy storageFacade.getItem . And it tries to use localStorage, but fallsback to your technique when disabled. ..Perhaps the way it works is via a single file for "diffs" i.e. each time you call setItem . And then a manifest` de todos los diffs creados durante la sesión que se crean automáticamente de vez en cuando.
faceyspacey.com
Si el manifiesto solo se creara de vez en cuando, esencialmente limitaría el número de manifiestos creados. Y luego, en JavaScript, podría intentar solicitar todos los manifiestos posibles creados, y luego usar el último para reconstruir el estado a partir de las instantáneas de diferencias. Si solo tuviéramos diferencias, podría haber cientos o miles y eso podría ser un problema de rendimiento para tratar de recuperarlos todos hasta que uno fallara. Es decir, busca el diff o manifiesto de forma incremental: manifest-1.js, manifest-2.js, etc., hasta que uno falla (porque no existe). Lo que significa que tienes todos los manifiestos (o diferencias)
faceyspacey.com
@ faceyspacey.com Lo siento, nunca hay bibliotecas. Debe codificar y actualizar constantemente su propia solución personalizada. Piénsalo. Tan pronto como desarrolle una lib para esto, todos los bloqueadores / navegadores / etc agregarán inmediatamente lo contrarrestarán. La única razón por la que esto funciona es porque se basa en una característica central del navegador muy importante que simplemente no eliminarán / deshabilitarán: CACHING. Sigo perdiendo mis inicios de sesión y contraseñas. Y como ya no hago muchas preguntas, no necesito responder muchas para poder dejar recompensas con reputación. Acabo de ver esto y me di cuenta de que no había una respuesta real.
Walter
30

No es posible identificar las computadoras que acceden a un sitio web sin la cooperación de sus propietarios. Sin embargo, si se lo permiten, puede almacenar una cookie para identificar la máquina cuando vuelva a visitar su sitio. La clave es que el visitante tiene el control; pueden eliminar la cookie y aparecer como un nuevo visitante en cualquier momento que lo deseen.

erickson
fuente
77
Si visita su sitio con 3 navegadores diferentes, tendrá 3 cookies diferentes, ya que las cookies no se comparten entre las aplicaciones. Además, si usa DHCP en lugar de una dirección IP estática, probablemente no tendrá la misma dirección IP para su computadora por mucho tiempo.
JohnnySoftware
2
Si y no. Las huellas digitales del navegador identifican un perfil de navegador con un alto grado de probabilidad, pero no es la identificación absoluta uno a uno que se busca en esta pregunta. También es bastante simple (pero quizás no fácil ) para un usuario inteligente eludir deliberadamente si lo desea.
erickson
30

Una posibilidad es usar cookies flash :

  • Disponibilidad ubicua (el 95 por ciento de los visitantes probablemente tendrán flash)
  • Puede almacenar más datos por cookie (hasta 100 KB)
  • Compartido en todos los navegadores, por lo que es más probable que identifique de forma única una máquina
  • Borrar las cookies del navegador no elimina las cookies flash.

Tendrá que construir una pequeña película flash (oculta) para leerla y escribirla.

Cualquiera sea la ruta que elija, asegúrese de que sus usuarios opten por ser rastreados, de lo contrario, está invadiendo su privacidad y se convierte en uno de los malos.

Joeri Sebrechts
fuente
55
Muchos usuarios usan Flashblock. Flash se activará desde el usuario con un clic si quiere verlo.
Horcrux7
3
Existen métodos para eliminar las cookies, pero están más allá del usuario promedio. Hay páginas en el sitio web de Adobe para ver y eliminar los LSO (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object ) aunque para los usuarios de Firefox el complemento de objeción es el método más fácil de eliminarlos
Sam Hasler
Creo que esta es una de las mejores soluciones. Youtube, Google, etc. utilizan LSO para combatir el abuso.
Uku Loskit
44
Las cookies flash se eliminan tan fácilmente como las cookies HTTP en las versiones modernas de Firefox y Chrome: Wikipedia :Adobe announced that Flash Player 10.3 enables Mozilla Firefox 4 and "future releases of Apple Safari and Google Chrome" to delete local shared objects,[11] so since version 4, Firefox treats LSOs the same way as HTTP cookies - deletion rules that previously applied only to HTTP cookies now also apply to LSOs.
JoJo
44
La situación ha cambiado en los últimos nueve años. Hoy en día, el 95 por ciento de los usuarios ni siquiera están en computadoras de escritorio, y los dispositivos móviles nunca adoptaron Adobe Flash Player.
Damian Yerrick
21

Es posible que desee intentar configurar una ID única en un evercookie (funcionará en varios navegadores, consulte sus preguntas frecuentes): http://samy.pl/evercookie/

También hay una compañía llamada ThreatMetrix que utilizan muchas grandes compañías para resolver este problema: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Son bastante caras y algunas de sus otros productos no son muy buenos, pero su identificación de dispositivo funciona bien.

Finalmente, existe esta implementación jquery de código abierto de la idea de panóptico: https://github.com/carlo/jquery-browser-fingerprint Parece bastante a medias en este momento, pero podría ampliarse.

¡Espero eso ayude!

Brian Armstrong
fuente
+ 1 - Brian - ¡Gran información! Todo esto ha demostrado ser muy útil. Gracias. Agregue más información si no ha aprendido más desde entonces.
Ben O
1
En cuanto a evercookie. Intenté con Opera. Establezca cookies, luego elimine todo el historial de Opera, luego cierre Opera, vuelva a abrir, haga clic Click to rediscover cookiesy vea nulo o indefinido. Así que esto no funciona para mí
Andris
Probé la página de muestra con el modo privado Safari de iOS y el incógnito Desktop Chrome, la cookie no se puede recuperar después de reiniciar el navegador.
Morio
20

Existe un método popular llamado huella digital de lienzo, descrito en este artículo científico: La Web nunca olvida: mecanismos de seguimiento persistente en la naturaleza . Una vez que empiece a buscarlo, se sorprenderá de la frecuencia con que se usa. El método crea una huella digital única, que es consistente para cada combinación de navegador / hardware.

El artículo también revisa otros métodos de seguimiento persistente, como evercookies, reaparición de cookies http y Flash, y sincronización de cookies.

Más información sobre huellas digitales en lienzo aquí:

Por Quested Aronsson
fuente
1
así que si dos dispositivos son idénticos (las mismas computadoras por lotes, el mismo sistema operativo, los mismos navegadores), las huellas digitales son las mismas, ¿verdad?
xiaoyu2er
La pregunta real aquí es dónde está la biblioteca de JavaScript que puedo colocar en mi código para usar esto. Leer un montón de teoría no resuelve los problemas que deben resolverse en los próximos 60 minutos.
Thanasis Ioannidis
11

Solo hay una pequeña cantidad de información que puede obtener a través de una conexión HTTP.

  1. IP - Pero como han dicho otros, esto no se soluciona para muchos, si no para la mayoría de los usuarios de Internet, debido a las políticas de asignación dinámica de su ISP.

  2. Cadena Useragent: casi todos los navegadores envían qué tipo de navegador son con cada solicitud. Sin embargo, esto puede ser configurado por el usuario en muchos navegadores hoy.

  3. Colección de campos de solicitud: se envían otros campos con cada solicitud, como codificaciones compatibles, etc. Estos, si se usan en conjunto, pueden ayudar a identificar la máquina de un usuario, pero nuevamente dependen del navegador y se pueden cambiar.

  4. Cookies: la configuración de una cookie es otra forma de identificar una máquina, o más específicamente un navegador en una máquina, pero como han dicho otros, los usuarios pueden eliminarla o desactivarla, y solo son aplicables en un navegador, no en un máquina.

Entonces, la respuesta correcta es que no puede lograr lo que viviría a través de los protocolos HTTP sobre IP solo. Sin embargo, al usar una combinación de cookies, así como IP, y los campos en la solicitud HTTP, tiene una buena oportunidad de adivinar, más o menos, qué máquina es. Los usuarios tienden a usar solo un navegador, y a menudo desde una máquina, por lo que esto puede ser bastante confiable, pero esto variará dependiendo de la audiencia ... los técnicos son más propensos a meterse con estas cosas y usar más máquinas / navegadores. Además, esto podría incluso combinarse con algún intento de ubicar geográficamente la IP y utilizar esos datos también. Pero en cualquier caso, no hay una solución que sea correcta todo el tiempo.

cdeszaq
fuente
10

Hay fallas con los enfoques de cookies y no cookies. Pero si puede perdonar las deficiencias del enfoque de cookies, aquí hay una idea.

Si ya está utilizando Google Analytics en su sitio, entonces no necesita escribir código para rastrear usuarios únicos. Google Analytics lo hace por usted a través del __utmavalor de la cookie, como se describe en la documentación de Google . Y al reutilizar este valor no está creando una carga útil adicional de cookies, lo que tiene beneficios de eficiencia con las solicitudes de página.

Y podría escribir un código lo suficientemente fácil como para acceder a ese valor, o utilizar la getUniqueId() función de este script .

Steve Wortham
fuente
¿Obtendré la misma identificación usando getUniqueId()diferentes navegadores en la misma máquina?
Ankur Akvaliya
8

Al igual que con las soluciones anteriores, las cookies son un buen método, tenga en cuenta que identifican los navegadores . Si visitara un sitio web en Firefox y luego en Internet Explorer, las cookies se almacenarían por separado para ambos intentos. Algunos usuarios también deshabilitan las cookies (pero más personas deshabilitan JavaScript).

Otro método a tener en cuenta sería la identificación de IP y nombre de host (tenga en cuenta que estos pueden variar para usuarios de acceso telefónico / IP no estático, AOL también utiliza IPs generales). Sin embargo, dado que esto solo identifica redes, podría no funcionar tan bien como las cookies.

Ross
fuente
Buen punto con la dirección IP que identifica el punto de acceso a la red: con NAT, podría haber países enteros ocultos detrás de una sola dirección IP y usted no sería más sabio. Con la escasez de direcciones IPv4, aún verá grandes compañías o escuelas / universidades que comparten una sola dirección IP para su tráfico saliente de Internet.
Piskvor salió del edificio el
6

Dejando de lado las sugerencias para usar cookies, el único conjunto completo de atributos de identificación disponibles para interrogar está contenido en el encabezado de solicitud HTTP. Por lo tanto, es posible utilizar algún subconjunto de estos para crear un identificador pseudo-único para un agente de usuario (es decir, navegador). Además, la mayor parte de esta información posiblemente ya esté registrada en el llamado "registro de acceso" de su software de servidor web de forma predeterminada y, si no, puede configurarse fácilmente para hacerlo. Luego, se podría desarrollar una utilidad que simplemente escanee el contenido de este registro, creando huellas digitalesde cada solicitud compuesta, por ejemplo, la dirección IP y la cadena del Agente de usuario, etc. Cuantos más datos estén disponibles, incluso el contenido de cookies específicas, se suma a la calidad de la singularidad de esta huella digital. Sin embargo, como muchos otros ya han dicho, el protocolo HTTP no lo hace 100% infalible; en el mejor de los casos, solo puede ser un indicador bastante bueno.

Danny Whitt
fuente
6

Cuando uso una máquina que nunca ha visitado mi sitio web de banca en línea, se me solicita una autenticación adicional. luego, si vuelvo por segunda vez al sitio de banca en línea, no me solicitan la autenticación adicional ... eliminé todas las cookies en IE y volví a iniciar sesión en mi sitio de banca en línea esperando que me vuelvan a hacer las preguntas de autenticación. para mi sorpresa no me preguntaron. ¿Esto no lleva a creer que el banco está haciendo algún tipo de etiquetado de PC que no involucra cookies?

Este es un tipo de autenticación bastante común utilizado por los bancos.

Digamos que está accediendo al sitio web de su banco a través de example-isp.com. La primera vez que esté allí, se le pedirá su contraseña, así como la autenticación adicional. Una vez que haya aprobado, el banco sabe que el usuario "thatisvaliant" está autenticado para acceder al sitio mediante example-isp.com.

En el futuro, no solicitará autenticación adicional (más allá de su contraseña) cuando acceda al sitio a través de example-isp.com. Si intenta acceder al banco a través de another-isp.com, el banco volverá a seguir la misma rutina.

Para resumir, lo que el banco identifica es su ISP y / o netblock, según su dirección IP. Obviamente, no todos los usuarios de su ISP son usted, por lo que el banco aún le solicita su contraseña.

¿Alguna vez ha llamado a una compañía de tarjetas de crédito para verificar que todo esté bien cuando usa una tarjeta de crédito en un país diferente? Mismo concepto

Anirvan
fuente
4

Realmente, lo que quieres hacer no se puede hacer porque los protocolos no lo permiten. Si las IP estáticas se usaran universalmente, entonces podría hacerlo. No lo son, así que no puedes.

Si realmente quieres identificar personas , sesión.

Dado que probablemente se moverán a diferentes páginas de su sitio web, necesita una forma de realizar un seguimiento de ellas a medida que se mueven.

Mientras estén conectados, y usted esté rastreando su sesión dentro de su sitio a través de cookies / parámetros de enlace / balizas / lo que sea, puede estar bastante seguro de que están usando la misma computadora durante ese tiempo.

En última instancia, es incorrecto decir que esto le indica qué computadora están usando si sus usuarios no están usando su propia red local y no tienen direcciones IP estáticas.

Si lo que desea hacer es hacerlo con la cooperación de los usuarios y solo hay un usuario por cookie y ellos usan un solo navegador web, simplemente use una cookie.

JohnnySoftware
fuente
3

Las cookies no serán útiles para determinar visitantes únicos. Un usuario puede borrar las cookies y actualizar el sitio; luego se lo clasifica como un nuevo usuario nuevamente.

Creo que la mejor manera de hacerlo es implementar una solución del lado del servidor (ya que necesitará un lugar para almacenar sus datos). Dependiendo de la complejidad de sus necesidades de dichos datos, deberá determinar qué se clasifica como una visita única. Un método sensato sería permitir que una dirección IP regrese al día siguiente y recibir una visita única. Varias visitas de una dirección IP en un día no deben contarse como únicas.

Usando PHP, por ejemplo, es trivial obtener la dirección IP de un visitante y almacenarla en un archivo de texto (o una base de datos sql).

Una solución del lado del servidor funcionará en todas las máquinas, porque va a rastrear al usuario cuando cargue su sitio por primera vez. No use javascript, ya que está destinado a las secuencias de comandos del lado del cliente, además el usuario puede haberlo deshabilitado en cualquier caso.

Espero que ayude.

diferente
fuente
44
Mi esposa y yo navegamos desde cuatro computadoras diferentes detrás de un firewall NAT en casa. Mostramos que tenemos la misma IP, por lo que según su esquema, nos mostramos como el mismo usuario.
Adam Ness
¿Qué pasa si en mysql escribir variables adicionales (mencionado aquí panopticlick.eff.org/browser-uniqueness.pdf )? Entonces, la dirección IP sería la misma, pero algunas otras características pueden ser diferentes.
Andris
3

Como quiero que la solución funcione en todas las máquinas y todos los navegadores (dentro de lo razonable) estoy tratando de crear una solución usando javascript.

¿No es una muy buena razón para no para usar JavaScript?

Como han dicho otros, las cookies son probablemente su mejor opción, solo tenga en cuenta las limitaciones.

Draemon
fuente
3

Puedes usar fingerprintjs2

new Fingerprint2().get(function(result, components) {
  console.log(result) // a hash, representing your device fingerprint
  console.log(components) // an array of FP components
  //submit hash and JSON object to the server 
})

Después de eso, puede verificar a todos sus usuarios contra los existentes y verificar la similitud de JSON, por lo que incluso si su huella digital muta, aún puede rastrearlos

Kit de herramientas
fuente
2

Supongo que el veredicto es que no puedo identificar programáticamente de manera única una computadora que está visitando mi sitio web.

Tengo la siguiente pregunta. Cuando uso una máquina que nunca ha visitado mi sitio web de banca en línea, se me solicita una autenticación adicional. luego, si vuelvo por segunda vez al sitio de banca en línea, no se me solicita la autenticación adicional. Al leer las respuestas a mi pregunta, decidí que debía tratarse de una cookie. por lo tanto, eliminé todas las cookies en IE y volví a iniciar sesión en mi sitio de banca en línea, esperando que me volvieran a hacer las preguntas de autenticación. para mi sorpresa no me preguntaron. ¿Esto no lleva a creer que el banco está haciendo algún tipo de etiquetado de PC que no involucra cookies?

Además, después de mucho buscar en Google hoy, encontré la siguiente compañía que afirma vender una solución que identifica de forma única las máquinas que visitan un sitio web. http://www.the41.com/products.asp .

Agradezco toda la buena información si pudiera aclarar más esta información conflictiva que encontré, la agradecería enormemente.

eso es valioso
fuente
Basado en esto: the41.com/download/… Parece que su solución es hacer que el usuario descargue un software que crea un identificador único basado en la máquina y lo vincula con algunas credenciales de inicio de sesión.
mmacaulay
Como ya se mencionó, no descartó que su banco utilizara una cookie Flash. Cómo borrar las cookies Flash y otras discusiones sobre el tema: tips.vlaurie.com/2007/10/24/…
micahwittman
Mi suposición: el banco probablemente confíe en que usted es usted si (1) conoce su nombre de usuario, (2) conoce su contraseña y (3a) tiene su cookie, o bien (3b) proviene de una dirección IP que previamente asociado con usted
Zack Peterson el
2

Lo haría usando una combinación de cookies y cookies flash. Cree un GUID y guárdelo en una cookie. Si la cookie no existe, intente leerla desde la cookie flash. Si aún no se encuentra, créelo y escríbalo en la cookie flash. De esta manera, puede compartir el mismo GUID en todos los navegadores.

Eric Hogue
fuente
1

Creo que las cookies pueden ser lo que estás buscando; así es como la mayoría de los sitios web identifican de manera única a los visitantes.

Steve
fuente
0

Suponiendo que no desea que el usuario tenga el control, no puede. La web no funciona así, lo mejor que puede esperar son algunas heurísticas.

Si es una opción para obligar a su visitante a instalar algún software y usar TCPA, puede lograr algo.

John Nilsson
fuente
0

Es posible que mi publicación no sea una solución, pero puedo proporcionar un ejemplo en el que se ha implementado esta característica.

Si visitas la página de registro de www.supertorrents.org por primera vez desde su computadora, está bien. Pero si actualiza la página o la abre de nuevo, identifica que ha visitado la página anteriormente. La verdadera belleza viene aquí: se identifica incluso si reinstalas Windows u otro sistema operativo.

Leí en alguna parte que almacenan la ID de la CPU. Aunque no pude encontrar cómo lo hacen, lo dudo seriamente, y podrían usar la dirección MAC para hacerlo.

Definitivamente compartiré si encuentro cómo hacerlo.

Sr. programador
fuente
www.supertorrents.org está muerto
Toolkit
0

Un truco:

  1. Crear 2 páginas de registro:

    Primera página de registro: sin correo electrónico ni verificación de seguridad (solo con nombre de usuario y contraseña)

    Segunda página de registro: con alto nivel de seguridad (solicitud de verificación de correo electrónico e imagen de seguridad, etc.)

  2. Para satisfacción del cliente y un registro fácil, la página de registro predeterminada debe ser la (Primera página de registro) pero en la (Primera página de registro) hay una restricción oculta. Es Restricción de IP. Si una IP intentó registrarse por segunda vez (por ejemplo, menos de 1 hora) en lugar de mostrar la página de bloqueo. puede mostrar la (Segunda página de registro) automáticamente.

  3. en la (Primera página de registro) puede configurar (por ejemplo: bloquear 2 intentos de 1 ip por solo 1 hora o 24 horas) y después (por ejemplo) 1 hora, puede abrir el acceso desde esa ip automáticamente

Tenga en cuenta: (Primera página de registro) y (Segunda página de registro) no deben estar en páginas separadas. haces solo 1 página. (por ejemplo: register.php) y haga que sea inteligente cambiar entre First PHP Style y Second PHP Style

Mahdi Jazini
fuente
Mahdi Jazini. Todos tienen razón, pero mi pregunta es cómo identificar la dirección IP de la máquina del cliente. Gracias.
JENKINS J