Estou construindo uma ferramenta analítica e, atualmente, posso obter o endereço IP, o navegador e o sistema operacional do usuário do agente do usuário.
Gostaria de saber se existe a possibilidade de detectar o mesmo usuário sem usar cookies ou armazenamento local? Não estou esperando exemplos de código aqui; apenas uma dica simples de onde procurar mais.
Esqueceu-se de mencionar que precisaria ser compatível com vários navegadores se fosse o mesmo computador / dispositivo. Basicamente, estou atrás do reconhecimento do dispositivo e não do usuário.
javascript
php
http-headers
fingerprinting
slash197
fonte
fonte
Respostas:
Introdução
Se o entendi corretamente, você precisa identificar um usuário para quem não possui um identificador exclusivo, para descobrir quem eles são combinando dados aleatórios. Você não pode armazenar a identidade do usuário de maneira confiável porque:
Um Java Applet ou Com Object seria uma solução fácil usando um hash de informações de hardware, mas hoje em dia as pessoas têm tanta segurança que seria difícil convencer as pessoas a instalar esses tipos de programas em seu sistema. Isso deixa você com o uso de cookies e outras ferramentas semelhantes.
Cookies e outras ferramentas similares
Você pode considerar criar um perfil de dados e usar testes de probabilidade para identificar um usuário provável . Um perfil útil para isso pode ser gerado por alguma combinação do seguinte:
Os itens que listei são, obviamente, apenas algumas maneiras possíveis de identificar um usuário de forma exclusiva. Há muito mais.
Com esse conjunto de elementos de dados aleatórios dos quais construir um perfil de dados, o que vem a seguir?
O próximo passo é desenvolver algum Fuzzy Logic , ou, ainda melhor, uma Rede Neural Artificial (que usa a lógica fuzzy). Em qualquer um dos casos, a idéia é treinar seu sistema e, em seguida, combinar seu treinamento com a Inferência Bayesiana para aumentar a precisão de seus resultados.
A biblioteca NeuralMesh para PHP permite gerar redes neurais artificiais. Para implementar a inferência bayesiana, confira os seguintes links:
Neste ponto, você pode estar pensando:
Por que tanta matemática e lógica para uma tarefa aparentemente simples?
Basicamente, porque não é uma tarefa simples . O que você está tentando alcançar é, de fato, Probabilidade pura . Por exemplo, considerando os seguintes usuários conhecidos:
Quando você recebe os seguintes dados:
A pergunta que você está fazendo essencialmente é:
Qual é a probabilidade de os dados recebidos (B + C + E + G + F + K) serem realmente Usuário1 ou Usuário2? E qual dessas duas partidas é mais provável?
Para responder efetivamente a essa pergunta, é necessário entender o formato de frequência versus probabilidade e por que a probabilidade conjunta pode ser uma abordagem melhor. Os detalhes são muitos para entrar aqui (e é por isso que eu estou fornecendo links), mas um bom exemplo seria um Aplicativo para Assistente de Diagnóstico Médico , que usa uma combinação de sintomas para identificar possíveis doenças.
Pense por um momento na série de pontos de dados que compõem seu Perfil de Dados (B + C + E + G + F + K no exemplo acima) como Sintomas e Usuários Desconhecidos como Doenças . Ao identificar a doença, você pode identificar ainda um tratamento apropriado (tratar esse usuário como Usuário1).
Obviamente, é mais fácil identificar uma doença para a qual identificamos mais de 1 sintoma . De fato, quanto mais sintomas pudermos identificar, mais fácil e preciso será nosso diagnóstico.
Há alguma outra alternativa?
Claro. Como medida alternativa, você pode criar seu próprio algoritmo de pontuação simples e basear-se em correspondências exatas. Isso não é tão eficiente quanto a probabilidade, mas pode ser mais simples de implementar.
Como exemplo, considere este gráfico de pontuação simples:
Para cada informação que você pode reunir em uma determinada solicitação, conceda a pontuação associada e use a Importância para resolver conflitos quando as pontuações forem iguais.
Prova de conceito
Para uma simples prova de conceito, dê uma olhada no Perceptron . O Perceptron é um modelo de RNA geralmente usado em aplicações de reconhecimento de padrões. Existe até uma classe PHP antiga que a implementa perfeitamente, mas você provavelmente precisaria modificá-la para seus propósitos.
Apesar de ser uma ótima ferramenta, o Perceptron ainda pode retornar vários resultados (possíveis correspondências); portanto, o uso de uma comparação de Pontuação e Diferença ainda é útil para identificar a melhor dessas correspondências.
Premissas
Expectativa
Código de Prova de Conceito
Resultado:
Print_r de "D":
Se Debug = true, você poderá ver Entrada (Sensor e Desejado), Pesos Iniciais, Saída (Sensor, Soma, Rede), Erro, Correção e Pesos Finais .
x1 a x20 representam os recursos convertidos pelo código.
Aqui está uma demonstração online
Classe usada:
Classe Perceptron modificada
Conclusão
Identificar um usuário sem um Identificador Único não é uma tarefa direta ou simples. depende da coleta de uma quantidade suficiente de dados aleatórios, que você pode coletar do usuário por vários métodos.
Mesmo se você optar por não usar uma rede neural artificial, sugiro pelo menos usar uma matriz de probabilidade simples com prioridades e probabilidades - e espero que o código e os exemplos fornecidos acima lhe dêem o suficiente para continuar.
fonte
Implement Bayesian inference using PHP
, todas as três partes. -Frequency vs Probability
-Joint Probability
-Input (Sensor & Desired), Initial Weights, Output (Sensor, Sum, Network), Error, Correction and Final Weights
Essa técnica (para detectar os mesmos usuários sem cookies - ou mesmo sem o endereço IP) é chamada de impressão digital do navegador . Basicamente, você rastreia o máximo possível de informações sobre o navegador - melhores resultados podem ser alcançados com javascript, flash ou java (por exemplo, extensões instaladas, fontes, etc.). Depois disso, você pode armazenar os resultados com hash, se desejar.
Não é infalível, mas:
Mais informações:
fonte
A impressão digital acima mencionada funciona, mas ainda pode sofrer colisões.
Uma maneira é adicionar o UID ao URL de cada interação com o usuário.
http://someplace.com/12899823/user/profile
Onde todos os links no site são adaptados com este modificador. É semelhante à maneira como o ASP.Net costumava trabalhar usando dados FORM entre páginas.
fonte
Você já olhou para Evercookie ? Pode ou não funcionar nos navegadores. Um extrato do site deles.
"Se um usuário for cozinhado em um navegador e alternar para outro, contanto que ainda possua o cookie Local Shared Object, o cookie será reproduzido nos dois navegadores."
fonte
Você pode fazer isso com um png em cache, seria um pouco confiável (navegadores diferentes se comportam de maneira diferente e falhará se o usuário limpar o cache), mas é uma opção.
1: configure um banco de dados que armazene um ID de usuário exclusivo como uma sequência hexadecimal
2: crie um arquivo genUser.php (ou qualquer outro idioma) que gere um ID de usuário, armazene-o no banco de dados e, em seguida, crie um .png de cor verdadeira a partir dos valores dessa sequência hexadecimal (cada pixel terá 4 bytes) e retornará isso para o navegador. Certifique-se de definir o tipo de conteúdo e os cabeçalhos de cache.
3: no HTML ou JS, crie uma imagem como
<img id='user_id' src='genUser.php' />
4: desenhe essa imagem em uma tela
ctx.drawImage(document.getElementById('user_id'), 0, 0);
5: leia os bytes dessa imagem usando
ctx.getImageData
e converta os números inteiros em uma sequência hexadecimal.6: esse é o seu ID de usuário exclusivo, agora armazenado em cache no computador dos usuários.
fonte
I'm after device recognition
é a oferta para o que ele quer, e ele elabora aqui: stackoverflow.com/questions/15966812/…Com base no que você disse:
A melhor maneira de fazer isso é enviar o endereço mac, que é o ID da NIC.
Você pode dar uma olhada neste post: Como posso obter o MAC e o endereço IP de um cliente conectado em PHP?
fonte
Você pode fazer isso com etags. Embora eu não tenha certeza se esse processo legal como um monte de ações foram ajuizadas.
Se você avisar corretamente seus usuários ou se você tiver algo como um site de intranet, pode estar tudo bem.
fonte
Você pode criar um blob para armazenar um identificador de dispositivo ...
A desvantagem é que o usuário precisa fazer o download do blob ( você pode forçar o download ), pois o navegador não pode acessar o sistema de arquivos para salvar diretamente o arquivo.
referência:
https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs
fonte
Ineficiente, mas pode fornecer os resultados desejados, seria pesquisar uma API do seu lado. Tenha um processo em segundo plano no lado do cliente que envie os dados do usuário em um intervalo. Você precisará de um identificador de usuário para enviar para sua API. Depois que você tiver, poderá enviar as informações associadas a esse identificador exclusivo.
Isso elimina a necessidade de cookies e armazenamento local.
fonte
Não acredito, http://browserspy.dk ainda não foi mencionado aqui! O site descreve muitos recursos (em termos de reconhecimento de padrões), que podem ser usados para criar um classificador.
E de causa, para avaliar os recursos, sugiro Support Vector Machines e libsvm em particular.
fonte
Rastreá-los durante uma sessão ou entre sessões?
Se o seu site for HTTPS Everywhere, você poderá usar o ID da sessão TLS para rastrear a sessão do usuário
fonte
isso exigirá que o usuário instale voluntariamente o identificador.
Depois que o plug-in é instalado, a impressão digital de qualquer navegador (ativado por plug-in) conterá esse plug-in específico. Para retornar as informações para um servidor, é necessário um algoritmo para detectar efetivamente o plug-in no lado do cliente; caso contrário, os usuários do IE e Firefox> = 28 precisarão de uma tabela de possíveis identificações válidas.
Isso requer um investimento relativamente alto em uma tecnologia que provavelmente será desativada pelos fornecedores de navegadores. Quando você consegue convencer seus usuários a instalar um plug-in, também pode haver opções como instalar um proxy local , usar vpn ou corrigir os drivers de rede.
Os usuários que não desejam ser identificados (ou suas máquinas) sempre encontrarão uma maneira de evitá-lo.
fonte
this will require the user to willingly install the identifier.
provavelmente não é o que o pôster original (OP) significava.