Estoy creando una herramienta analítica y actualmente puedo obtener la dirección IP, el navegador y el sistema operativo del usuario de su agente de usuario.
Me pregunto si existe la posibilidad de detectar al mismo usuario sin usar cookies o almacenamiento local. No espero ejemplos de código aquí; solo una simple pista de dónde buscar más.
Olvidé mencionar que tendría que ser compatible con todos los navegadores si es la misma computadora / dispositivo. Básicamente, después del reconocimiento del dispositivo, no soy realmente el usuario.
javascript
php
http-headers
fingerprinting
slash197
fuente
fuente
Respuestas:
Introducción
Si lo entiendo correctamente, debe identificar a un usuario para el que no tiene un identificador único, por lo que desea averiguar quiénes son haciendo coincidir los datos aleatorios. No puede almacenar la identidad del usuario de manera confiable porque:
Un Java Applet o Com Object habría sido una solución fácil utilizando un hash de información de hardware, pero en estos días las personas son tan conscientes de la seguridad que sería difícil hacer que las personas instalen este tipo de programas en su sistema. Esto te deja atascado con el uso de cookies y otras herramientas similares.
Cookies y otras herramientas similares.
Puede considerar crear un perfil de datos y luego usar pruebas de probabilidad para identificar a un usuario probable . Se puede generar un perfil útil para esto mediante una combinación de lo siguiente:
Los elementos que enumeré son, por supuesto, solo algunas maneras posibles en que un usuario puede ser identificado de manera única. Hay muchos más.
Con este conjunto de elementos de datos aleatorios para construir un perfil de datos, ¿qué sigue?
El siguiente paso es desarrollar alguna lógica difusa o, mejor aún, una red neuronal artificial (que utiliza lógica difusa). En cualquier caso, la idea es entrenar su sistema y luego combinar su entrenamiento con la Inferencia Bayesiana para aumentar la precisión de sus resultados.
La biblioteca NeuralMesh para PHP le permite generar redes neuronales artificiales. Para implementar la inferencia bayesiana, consulte los siguientes enlaces:
En este punto, puede estar pensando:
¿Por qué tanta matemática y lógica para una tarea aparentemente simple?
Básicamente, porque no es una tarea simple . Lo que está tratando de lograr es, de hecho, probabilidad pura . Por ejemplo, dados los siguientes usuarios conocidos:
Cuando reciba los siguientes datos:
La pregunta que esencialmente hace es:
¿Cuál es la probabilidad de que los datos recibidos (B + C + E + G + F + K) sean realmente Usuario1 o Usuario2? ¿Y cuál de esos dos partidos es más probable?
Para responder esta pregunta de manera efectiva, debe comprender el formato de frecuencia versus probabilidad y por qué la probabilidad conjunta podría ser un mejor enfoque. Los detalles son demasiado para entrar aquí (es por eso que le doy enlaces), pero un buen ejemplo sería una aplicación de asistente de diagnóstico médico , que utiliza una combinación de síntomas para identificar posibles enfermedades.
Piense por un momento en la serie de puntos de datos que comprenden su Perfil de datos (B + C + E + G + F + K en el ejemplo anterior) como Síntomas , y Usuarios desconocidos como Enfermedades . Al identificar la enfermedad, puede identificar aún más un tratamiento apropiado (trate a este usuario como Usuario1).
Obviamente, una enfermedad para la cual hemos identificado más de 1 síntoma es más fácil de identificar. De hecho, cuantos más síntomas podamos identificar, más fácil y preciso será nuestro diagnóstico.
¿Hay otras alternativas?
Por supuesto. Como medida alternativa, puede crear su propio algoritmo de puntuación simple y basarlo en coincidencias exactas. Esto no es tan eficiente como la probabilidad, pero puede ser más sencillo de implementar.
Como ejemplo, considere esta tabla de puntaje simple:
Para cada información que pueda reunir en una solicitud determinada, otorgue el puntaje asociado, luego use Importancia para resolver conflictos cuando los puntajes sean iguales.
Prueba de concepto
Para una simple prueba de concepto, eche un vistazo a Perceptron . Perceptron es un modelo de ARN que generalmente se usa en aplicaciones de reconocimiento de patrones. Incluso hay una antigua clase PHP que la implementa perfectamente, pero es probable que deba modificarla para sus propósitos.
A pesar de ser una gran herramienta, Perceptron aún puede devolver múltiples resultados (posibles coincidencias), por lo que usar una comparación de Puntuación y Diferencia sigue siendo útil para identificar la mejor de esas coincidencias.
Supuestos
Expectativa
Código de prueba de concepto
Salida:
Imprimir_r de "D":
Si Debug = true, podrá ver Entrada (Sensor y Deseado), Pesos iniciales, Salida (Sensor, Suma, Red), Error, Corrección y Pesos finales .
x1 a x20 representan las características convertidas por el código.
Aquí hay una demostración en línea
Clase utilizada:
Clase de perceptrón modificado
Conclusión
Identificar a un usuario sin un Identificador único no es una tarea sencilla o sencilla. depende de la recopilación de una cantidad suficiente de Datos aleatorios que puede recopilar del usuario mediante una variedad de métodos.
Incluso si elige no usar una Red neuronal artificial, sugiero al menos usar una Matriz de probabilidad simple con prioridades y probabilidades, y espero que el código y los ejemplos proporcionados anteriormente le den suficiente para continuar.
fuente
Implement Bayesian inference using PHP
, las 3 partes. -Frequency vs Probability
-Joint Probability
-Input (Sensor & Desired), Initial Weights, Output (Sensor, Sum, Network), Error, Correction and Final Weights
Esta técnica (para detectar a los mismos usuarios sin cookies, o incluso sin dirección IP) se llama huella digital del navegador . Básicamente, puede rastrear la información sobre el navegador que puede: se pueden obtener mejores resultados con javascript, flash o java (por ejemplo, extensiones instaladas, fuentes, etc.). Después de eso, puede almacenar los resultados hash, si lo desea.
No es infalible, pero:
Más información:
fuente
Las huellas digitales mencionadas anteriormente funcionan, pero aún pueden sufrir colisiones.
Una forma es agregar UID a la url de cada interacción con el usuario.
http://someplace.com/12899823/user/profile
Donde cada enlace en el sitio se adapta con este modificador. Es similar a la forma en que ASP.Net solía funcionar utilizando datos FORM entre páginas.
fuente
¿Has mirado en Evercookie ? Puede o no funcionar en todos los navegadores. Un extracto de su sitio.
"Si un usuario se cocina en un navegador y cambia a otro navegador, siempre que tenga la cookie Local Shared Object, la cookie se reproducirá en ambos navegadores".
fuente
Puede hacer esto con un png en caché, sería algo poco confiable (los diferentes navegadores se comportan de manera diferente y fallará si el usuario borra su caché), pero es una opción.
1: configure una base de datos que almacene una identificación de usuario única como una cadena hexadecimal
2: cree un archivo genUser.php (o cualquier idioma) que genere una identificación de usuario, lo almacene en la base de datos y luego cree un color verdadero .png a partir de los valores de esa cadena hexadecimal (cada píxel será de 4 bytes) y regrese eso para el navegador. Asegúrese de configurar el tipo de contenido y los encabezados de caché.
3: en HTML o JS crea una imagen como
<img id='user_id' src='genUser.php' />
4: dibuja esa imagen en un lienzo
ctx.drawImage(document.getElementById('user_id'), 0, 0);
5: lee los bytes de esa imagen usando
ctx.getImageData
, y convierte los enteros en una cadena hexadecimal.6: Esa es su identificación de usuario única que ahora está almacenada en caché en la computadora de su usuario.
fuente
I'm after device recognition
es el regalo de lo que quiere, y él elabora aquí: stackoverflow.com/questions/15966812/…Basado en lo que has dicho:
La mejor manera de hacerlo es enviar la dirección MAC, que es la ID de la NIC.
Puedes echar un vistazo a esta publicación: ¿Cómo puedo obtener el MAC y la dirección IP de un cliente conectado en PHP?
fuente
Puedes hacerlo con etags. Aunque no estoy seguro si esto legal como un montón de demandas se presentaron.
Si advierte adecuadamente a sus usuarios o si tiene algo como un sitio web de intranet, podría estar bien.
fuente
Potencialmente podría crear un blob para almacenar un identificador de dispositivo ...
La desventaja es que el usuario necesita descargar el blob ( puede forzar la descarga ), ya que el navegador no puede acceder al Sistema de archivos para guardar directamente el archivo.
referencia:
https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs
fuente
Ineficiente, pero puede darle los resultados deseados, sería sondear una API de su lado. Tenga un proceso en segundo plano en el lado del cliente que envíe los datos del usuario a intervalos. Necesitará un identificador de usuario para enviar a su API. Una vez que tenga eso, puede enviar cualquier información asociada a ese identificador único.
Esto elimina la necesidad de cookies y almacenamiento local.
fuente
No puedo creer, ¡ http://browserspy.dk todavía no ha sido mencionado aquí! El sitio describe muchas características (en términos de reconocimiento de patrones), que podrían usarse para construir un clasificador.
Y, por supuesto , para evaluar las características sugeriría Support Vector Machines y libsvm en particular.
fuente
Rastrearlos durante una sesión o entre sesiones?
Si su sitio es HTTPS Everywhere, puede usar el ID de sesión TLS para rastrear la sesión del usuario
fuente
esto requerirá que el usuario instale voluntariamente el identificador.
una vez que se instala el complemento, la huella digital de cualquier navegador (complemento habilitado) contendrá este complemento específico. Para devolver la información a un servidor, se necesita un algoritmo para detectar efectivamente el complemento en el lado del cliente; de lo contrario, IE y Firefox> = 28 usuarios necesitarán una tabla de posibles identificaciones válidas.
Esto requiere una inversión relativamente alta en una tecnología que probablemente será cerrada por los proveedores de navegadores. Cuando pueda convencer a sus usuarios para que instalen un complemento, también puede haber opciones como instalar un proxy local , usar vpn o parchear los controladores de red.
Los usuarios que no desean ser identificados (o sus máquinas) siempre encontrarán una manera de evitarlo.
fuente
this will require the user to willingly install the identifier.
probablemente no sea lo que significaba el póster original (OP).