Como identifico exclusivamente os computadores que visitam meu site?

184

Preciso descobrir uma maneira de identificar exclusivamente cada computador que visita o site que estou criando. Alguém tem algum conselho sobre como conseguir isso?

Porque eu quero que a solução funcione em todas as máquinas e em todos os navegadores (dentro do razoável), estou tentando criar uma solução usando javascript.

Cookies não servem.

Eu preciso da capacidade de criar basicamente um guia exclusivo para um computador e repetível, assumindo que nenhuma alteração de hardware aconteceu no computador. As direções em que estou pensando estão obtendo o MAC da placa de rede e outras informações dessa natureza que identificam a máquina que visita o site.

thatisvaliant
fonte
4
Você não pode obter o mac da placa de rede - o IP não contém essas informações, o melhor que você pode obter é o endereço IP do gateway do ISP. Para alguns ISPs, isso pode ser o mesmo para todos os usuários em uma determinada cidade.
22380 Martin Beckett
1
O fato de você não desejar que o usuário possa falsificá-lo. A resposta é claro que isso não pode ser feito sem que algum componente privilegiado esteja instalado na máquina do usuário.
AnthonyWJones
Os endereços MAC são trivialmente fáceis de falsificar. Minha pequena conexão sem fio passará pelo seu MAC, substituirá a sua ou usará a que você especificar.
19598 Kent Brewster
Isso não pode ser feito - os cookies são a sua melhor aposta
Draemon
Por favor, leia minha resposta nesta página. eu tenho uma idéia muito boa para este problema :)
Mahdi Jazini

Respostas:

58

Essas pessoas desenvolveram um método de impressão digital para reconhecer um usuário com um alto nível de precisão:

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

Investigamos o grau em que os navegadores modernos estão sujeitos à "impressão digital do dispositivo" por meio das informações de versão e configuração que eles transmitirão aos sites mediante solicitação. Implementamos um possível algoritmo de impressão digital e coletamos essas impressões digitais de uma grande amostra de navegadores que visitaram nosso lado de teste, panopticlick.eff.org. Observamos que a distribuição de nossas impressões digitais contém pelo menos 18,1 bits de entropia, o que significa que, se escolhermos um navegador aleatoriamente, na melhor das hipóteses, esperamos que apenas um em 286.777 outros navegadores compartilhe sua impressão digital. Entre os navegadores que suportam Flash ou Java, a situação é pior, com o navegador médio carregando pelo menos 18,8 bits de informações de identificação. 94,2% dos navegadores com Flash ou Java eram únicos em nossa amostra.

Observando os visitantes que retornam, estimamos com que rapidez as impressões digitais do navegador podem mudar com o tempo. Em nossa amostra, as impressões digitais mudaram rapidamente, mas mesmo uma heurística simples era capaz de adivinhar quando uma impressão digital era uma versão "atualizada" da impressão digital de um navegador observado anteriormente, com 99,1% das suposições corretas e uma taxa de falsos positivos de apenas 0,86% .

Discutimos o que a impressão digital do navegador de ameaças à privacidade representa na prática e quais contramedidas podem ser apropriadas para evitá-la. Há uma troca entre a proteção contra a impressão digital e certos tipos de depuração, que nos navegadores atuais são fortemente afetados pela privacidade. Paradoxalmente, as tecnologias de privacidade anti-impressão digital podem ser autodestrutivas se não forem usadas por um número suficiente de pessoas; mostramos que algumas medidas de privacidade atualmente são vítimas desse paradoxo, mas outras não ...

Jonathan
fonte
14
Sou desenvolvedor, vim aqui procurar uma solução rápida ou um pequeno trecho de código. Este documento não mostra como implementá-lo. Quero saber como faço para implementar isso para poder rastrear usuários únicos do meu site.
Oliver
10
@ Oliver Você está correto. Isso não dá a resposta em um prato. Requer leitura adicional, compreensão de todos os problemas envolvidos e por que é improvável que um trecho de código simples funcione completamente. Um desenvolvedor empreendedor pode escrever uma biblioteca que faça todo o trabalho duro e permitir que as pessoas que procuram uma "solução rápida" se beneficiem no futuro.
27717 Jonathan
2
A resposta também é apenas para link. Um resumo das técnicas descritas no PDF será apreciado caso o PDF fique indisponível.
Damian Yerrick
2
Veja minha resposta aqui para um pacote de código aberto e fácil-ish para implementar fingerprinting stackoverflow.com/a/47536192/3650835
KayakinKoder
Então é melhor eu fazer um "cookie" resiliente com um número grande aleatória: D
Luis Mauricio
49

Introdução

Não sei se existe ou haverá uma maneira de identificar exclusivamente máquinas usando um navegador sozinho. Os principais motivos são:

  • Você precisará salvar os dados no computador dos usuários. Esses dados podem ser excluídos pelo usuário a qualquer momento. A menos que você tenha uma maneira de recriar esses dados, que são únicos para cada máquina e depois para a sua máquina.
  • Validação. Você precisa se proteger contra falsificação, seqüestro de sessão, etc.

Mesmo que haja maneiras de rastrear um computador sem usar cookies, sempre haverá uma maneira de ignorá-lo e de software que fará isso automaticamente. Se você realmente precisar rastrear algo baseado em um computador, precisará criar um aplicativo nativo (Apple Store / Android Store / Windows Program / etc).

Talvez eu não seja capaz de dar uma resposta para a pergunta que você fez, mas posso mostrar como implementar o acompanhamento de sessões. Com o acompanhamento de sessões, você tenta acompanhar a sessão de navegação em vez do computador que visita o site. Ao rastrear a sessão, seu esquema do banco de dados ficará assim:

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
  }, ...]

Vantagens do rastreamento baseado em sessão:

  1. Para usuários conectados, você sempre pode gerar a mesma ID de sessão a partir dos usuários username/ password/ email.
  2. Você ainda pode rastrear usuários convidados usando sessionID.
  3. Mesmo que várias pessoas usem o mesmo computador (por exemplo, cybercafé), você poderá rastreá-las separadamente se elas fizerem login.

Desvantagens do rastreamento baseado em sessão:

  1. As sessões são baseadas no navegador e não no computador. Se um usuário usar 2 navegadores diferentes, isso resultará em 2 sessões diferentes. Se este for um problema, você pode parar de ler aqui.
  2. As sessões expiram se o usuário não estiver conectado. Se um usuário não estiver conectado, elas usarão uma sessão de convidado que será invalidada se o usuário excluir cookies e cache do navegador.

Implementação

Existem muitas maneiras de implementar isso. Eu não acho que posso cobrir todos eles, vou apenas listar o meu favorito, o que tornaria isso uma resposta opinativa . Tenha isso em mente.

Fundamentos

Acompanharei a sessão usando o que é conhecido como cookie para sempre. São dados que se auto-recriam automaticamente, mesmo que o usuário exclua seus cookies ou atualize seu navegador. No entanto, ele não sobreviverá ao usuário excluir os cookies e o cache de navegação.

Para implementar isso, usarei o mecanismo de cache dos navegadores ( RFC ), a API WebStorage ( MDN ) e os cookies do navegador ( RFC , Google Analytics ).

Legal

Para utilizar os IDs de rastreamento, você precisa adicioná-los à sua política de privacidade e aos seus termos de uso, de preferência sob o subtítulo Rastreamento . Usaremos as seguintes teclas em ambos document.cookiee window.localStorage:

  • _ga : dados do Google Analytics
  • __utma : cookie de rastreamento do Google Analytics
  • sid : SessionID

Inclua links para sua política de privacidade e termos de uso em todas as páginas que usam o rastreamento.

Onde guardo meus dados da sessão?

Você pode armazenar os dados da sessão no banco de dados do site ou no computador dos usuários. Como eu normalmente trabalho em sites menores (com mais de 10 mil conexões contínuas) que usam aplicativos de terceiros (Google Analytics / Clicky / etc), é melhor eu armazenar dados no computador do cliente. Isso tem as seguintes vantagens:

  1. Nenhuma pesquisa de banco de dados / sobrecarga / carga / latência / espaço / etc.
  2. O usuário pode excluir seus dados sempre que quiser, sem a necessidade de me escrever e-mails irritantes.

e desvantagens:

  1. Os dados devem ser criptografados / descriptografados e assinados / verificados, o que cria sobrecarga da CPU no cliente (não tão ruim) e no servidor (bah!).
  2. Os dados são excluídos quando o usuário exclui seus cookies e cache. (é isso que eu realmente quero)
  3. Os dados não estão disponíveis para análise quando os usuários ficam off-line. (análise apenas para usuários que navegam atualmente)

UUIDS

  • BrowserID : id único gerado a partir da seqüência do agente navegadores usuário.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : Gerado a partir dos usuários Endereço IP e chave de sessão HTTPS. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : impressão digital baseada em JavaScript com base em um fingerprint.js modificado .FingerPrint.get()
  • SessionID : chave aleatória gerada quando o primeiro usuário visita o site.BrowserID|ComputerID|randombytes(256)
  • GoogleID : gerado a partir de __utmacookies.getCookie(__utma).uniqueid

Mecanismo

No outro dia, eu estava assistindo o show de Wendy Williams com minha namorada e fiquei completamente horrorizada quando a apresentadora aconselhou os espectadores a excluir o histórico do navegador pelo menos uma vez por mês. A exclusão do histórico do navegador normalmente tem os seguintes efeitos:

  1. Exclui o histórico dos sites visitados.
  2. Exclui cookies e window.localStorage(aww man).

A maioria dos navegadores modernos disponibiliza essa opção facilmente, mas não tem medo de amigos. Pois existe uma solução. O navegador possui um mecanismo de armazenamento em cache para armazenar scripts / imagens e outras coisas. Normalmente, mesmo se excluirmos nosso histórico, esse cache do navegador ainda permanece. Tudo o que precisamos é de uma maneira de armazenar nossos dados aqui. Existem 2 métodos para fazer isso. O melhor é usar uma imagem SVG e armazenar nossos dados dentro de suas tags. Dessa forma, os dados ainda podem ser extraídos, mesmo se o JavaScript estiver desativado usando o flash. No entanto, como isso é um pouco complicado, demonstrarei a outra abordagem que usa JSONP ( Wikipedia )

example.com/assets/js/tracking.js (na verdade 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);
}

Agora podemos obter a chave da sessão a qualquer momento:

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

Como faço para o tracking.js ficar no navegador?

Podemos conseguir isso usando os cabeçalhos Cache-Control , Last-Modified e ETag HTTP. Podemos usar o SessionIDvalor as para o cabeçalho etag:

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

Last-ModifiedO cabeçalho informa ao navegador que esse arquivo basicamente nunca é modificado. Cache-Controlinforma aos proxies e gateways para não armazenar em cache o documento, mas ao navegador para armazená-lo em cache por 1 ano.

Na próxima vez que o navegador solicitar o documento, ele enviará If-Modified-Sincee If-None-Matchcabeçalhos. Podemos usá-los para retornar uma 304 Not Modifiedresposta.

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();
}

Agora, toda vez que o navegador solicitar, tracking.jsnosso servidor responderá com um 304 Not Modifiedresultado e forçará a execução da cópia local de tracking.js.

Eu ainda não entendo. Explique para mim

Vamos supor que o usuário limpe seu histórico de navegação e atualize a página. A única coisa que resta no computador dos usuários é uma cópia tracking.jsno cache do navegador. Quando o navegador solicita, tracking.jsele recebe uma 304 Not Modifiedresposta que faz com que execute a 1ª versão tracking.jsrecebida. tracking.jsexecuta e restaura o SessionIDque foi excluído.

Validação

Suponha que o Haxor X roube os cookies de nossos clientes enquanto eles ainda estão conectados. Como os protegemos? Criptografia e impressão digital do navegador para o resgate. Lembre-se de nossa definição original para SessionIDwas:

BrowserID|ComputerID|randomBytes(256)

Podemos mudar isso para:

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

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

Agora podemos validar nosso SessionIDusando o seguinte 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; 

Agora, para que o ataque da Haxor funcione, eles devem:

  1. Tenha o mesmo ComputerID. Isso significa que eles precisam ter o mesmo provedor de ISP que a vítima (Tricky). Isso dará à vítima a oportunidade de tomar uma ação legal em seu próprio país. A Haxor também deve obter a chave de sessão HTTPS da vítima (Difícil).
  2. Tenha o mesmo BrowserID. Qualquer pessoa pode falsificar a sequência do agente do usuário (irritante).
  3. Ser capaz de criar seu próprio falso SessionID(Muito Difícil). Os ataques de volume não funcionarão porque usamos um carimbo de data / hora para gerar a chave de criptografia / assinatura; basicamente, é como gerar uma nova chave para cada sessão. Além disso, criptografamos bytes aleatórios para que um simples ataque de dicionário também esteja fora de questão.

Podemos melhorar a validação encaminhando GoogleIDe FingerprintID(via ajax ou campos ocultos) e comparando com esses.

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;
Walter
fonte
1
Esta é uma bela resposta a propósito. Tanta informação. Estou surpreso que você não tenha mais votos positivos. Sinceramente, não acredito que a técnica com svgs e jsonp exista, mas deve. Não existe uma biblioteca que recorra a essa técnica quando cookies / localStorage / sessionStorage estão desativados?
Face0y.com 10/10
Além disso, gostaria de saber se existe uma versão avançada disso para simplesmente usar seu arquivo tracking.js em cache (ou vários desses arquivos) para usá-lo como essencialmente localStorage / cookies, ou seja, para lembrar muitos dados. A idéia seria que uma biblioteca tivesse métodos como storageFacade.setIteme manifesto 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 de todas as diferenças criadas durante a sessão que é criada automaticamente de vez em quando.
Face04.com
Se o manifesto fosse criado apenas de vez em quando, essencialmente limitaria o número de manifestos criados. E, posteriormente, em javascript, você pode tentar solicitar todos os manifestos possíveis criados e, em seguida, usar o mais recente para reconstruir o estado a partir dos instantâneos diff. Se tivéssemos apenas diferenças, poderia haver centenas ou milhares e isso poderia ser um problema de desempenho para tentar buscá-las até que uma falhasse. Ou seja, você busca o diff ou manifesto incrementalmente: manifest-1.js, manifest-2.js, etc., até que um falhe (porque não existe). Que meios u tem todos os manifestos (ou diffs)
faceyspacey.com
@ faceyspacey.com Desculpe nunca bibliotecas. Você precisa codificar e atualizar constantemente sua própria solução personalizada. Pense nisso. Assim que você desenvolve uma biblioteca para isso, todos os bloqueadores / navegadores / etc adicionam-na imediatamente. A única razão pela qual isso funciona é porque se baseia em um recurso importante do navegador principal, que eles simplesmente não removerão / desabilitarão: CACHING. Continuo perdendo meus logins e senhas. E como não faço mais muitas perguntas, não preciso responder muitas para poder deixar recompensas com reputação. Acabei de ver isso e percebi que não havia uma resposta real.
Walter
30

Não é possível identificar os computadores que acessam um site sem a cooperação de seus proprietários. Se eles permitirem, no entanto, você pode armazenar um cookie para identificar a máquina quando ela visitar seu site novamente. A chave é que o visitante está no controle; eles podem remover o cookie e aparecer como um novo visitante a qualquer momento.

erickson
fonte
7
Se ele visitar seu site com três navegadores diferentes, ele terá três cookies diferentes, pois os cookies não são compartilhados entre aplicativos. Além disso, se ele usa DHCP em vez de um endereço IP estático, provavelmente não terá o mesmo endereço IP para o computador por muito tempo.
precisa saber é o seguinte
2
Sim e não. A impressão digital do navegador identifica um perfil de navegador com um alto grau de probabilidade, mas não é a identificação individual absoluta buscada nesta questão. Também é bastante simples (mas talvez não seja fácil ) para um usuário mais experiente contornar deliberadamente, se assim o desejar.
Erickson
30

Uma possibilidade é usar cookies flash :

  • Disponibilidade onipresente (95% dos visitantes provavelmente terão flash)
  • Você pode armazenar mais dados por cookie (até 100 KB)
  • Compartilhado entre navegadores, com maior probabilidade de identificar uma máquina exclusivamente
  • Limpar os cookies do navegador não remove os cookies flash.

Você precisará criar um pequeno filme flash (oculto) para lê-los e gravá-los.

Qualquer que seja o caminho que você escolher, verifique se seus usuários optam por ser rastreados; caso contrário, você está invadindo a privacidade deles e se tornando um dos bandidos.

Joeri Sebrechts
fonte
5
Muitos usuários usam o Flashblock. O Flash será ativado a partir do usuário com um clique, se ele quiser vê-lo.
Horcrux7 19/10/08
3
Existem métodos para remover os cookies, mas estão além do usuário médio. Existem páginas do site da Adobe para visualização e remoção (objeto compartilhado local de LSO en.wikipedia.org/wiki/Local_Shared_Object ) Embora para os usuários do Firefox a objeção add-on é o método mais fácil para removê-los
Sam Hasler
Eu acho que essa é uma das melhores soluções. Youtube, Google etc. usam LSOs para combater abusos.
Uku Loskit
4
Os cookies Flash são tão facilmente excluídos quanto os cookies HTTP nas versões modernas do Firefox e 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
4
A situação mudou nos últimos nove anos. Atualmente, 95% dos usuários nem sequer estão no computador e os dispositivos móveis nunca adotaram o Adobe Flash Player.
Damian Yerrick 30/09
21

Você pode tentar definir um ID exclusivo em um evercookie (ele funcionará em vários navegadores, consulte as perguntas frequentes): http://samy.pl/evercookie/

Há também uma empresa chamada ThreatMetrix que é usada por muitas grandes empresas para resolver esse problema: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Elas são muito caras e algumas os outros produtos não são muito bons, mas o ID do dispositivo funciona bem.

Por fim, existe esta implementação de jquery de código aberto da ideia do panopticlick: https://github.com/carlo/jquery-browser-fingerprint Parece bem meio cozido agora, mas pode ser expandido.

Espero que ajude!

Brian Armstrong
fonte
+ 1 - Brian - Ótima informação! Tudo isso se mostrou muito útil. Obrigado. Adicione mais informações se você não aprender mais desde então.
Ben O
1
Em relação a evercookie. Tentei com o Opera. Definir cookies, depois excluir todo o histórico do Opera, fechar o Opera, abrir novamente clicar Click to rediscover cookiese ver nulo ou indefinido. Portanto, isso não funciona para mim
Andris
Tentou a página de amostra com o modo iOS Safari Private e o Desktop Chrome anônimo, o cookie não pode ser recuperado após a reinicialização do navegador.
Morio
20

Existe um método popular chamado impressão digital em tela, descrito neste artigo científico: A Web nunca esquece: mecanismos de rastreamento persistentes em estado selvagem . Depois de começar a procurá-lo, você ficará surpreso com a frequência com que é usado. O método cria uma impressão digital exclusiva, consistente para cada combinação de navegador / hardware.

O artigo também analisa outros métodos de rastreamento persistentes, como evercookies, respawning http e cookies em Flash e sincronização de cookies.

Mais informações sobre impressão digital em tela aqui:

Por Aronsson requerido
fonte
1
então, se dois dispositivos são idênticos (mesmo lote de computadores, mesmo sistema operacional, mesmos navegadores), as impressões digitais são as mesmas, certo?
Xiaoyu2er 19/05/19
A questão real aqui é onde é a biblioteca javascript que posso inserir no meu código para usar isso. Ler uma tonelada de teoria não resolve problemas que devem ser resolvidos nos próximos 60 minutos.
Thanasis Ioannidis
11

Há apenas uma pequena quantidade de informações que você pode obter por meio de uma conexão HTTP.

  1. IP - Mas, como já foi dito, isso não é corrigido para muitos, senão para a maioria dos usuários da Internet, devido às políticas de alocação dinâmica de seus provedores.

  2. Useragent String - Quase todos os navegadores enviam o tipo de navegador a cada solicitação. No entanto, isso pode ser definido pelo usuário em muitos navegadores hoje.

  3. Coleção de campos de solicitação - Existem outros campos enviados com cada solicitação, como codificações suportadas, etc. Esses, se usados ​​em conjunto, podem ajudar a identificar a máquina de um usuário, mas novamente dependem do navegador e podem ser alterados.

  4. Cookies - Definir um cookie é outra maneira de identificar uma máquina, ou mais especificamente um navegador em uma máquina, mas, como já foi dito, eles podem ser excluídos ou desativados pelos usuários, e são aplicáveis ​​apenas em um navegador, não em um navegador. máquina.

Portanto, a resposta correta é que você não pode alcançar o que gostaria de viver apenas através dos protocolos HTTP sobre IP. No entanto, usando uma combinação de cookies, além de IP e os campos na solicitação HTTP, você tem uma boa chance de adivinhar, mais ou menos, qual é a máquina. Os usuários tendem a usar apenas um navegador, e geralmente de uma máquina, portanto, isso pode ser bastante confiável, mas isso varia de acordo com o público ... os técnicos têm maior probabilidade de mexer com essas coisas e usam mais máquinas / navegadores. Além disso, isso pode até ser associado a alguma tentativa de localizar geograficamente o IP e usar esses dados também. Mas, em qualquer caso, não há solução que esteja correta o tempo todo.

cdeszaq
fonte
10

Existem falhas nas abordagens de cookie e não-cookie. Mas se você pode perdoar as deficiências da abordagem de cookies, aqui está uma idéia.

Se você já usa o Google Analytics em seu site, não precisa escrever um código para rastrear usuários únicos. O Google Analytics faz isso por você através do __utmavalor do cookie, conforme descrito na documentação do Google . E ao reutilizar esse valor, você não está criando carga útil adicional de cookies, o que traz benefícios de eficiência com as solicitações de página.

E você pode escrever algum código com facilidade o suficiente para acessar esse valor ou usar a getUniqueId() função desse script .

Steve Wortham
fonte
Vou obter o mesmo ID usando getUniqueId()diferentes navegadores na mesma máquina?
Ankur Akvaliya
8

Como nas soluções anteriores, os cookies são um bom método, mas lembre-se de que eles identificam os navegadores . Se eu visse um site no Firefox e, em seguida, no Internet Explorer, os cookies seriam armazenados para as duas tentativas separadamente. Alguns usuários também desativam os cookies (mas mais pessoas desativam o JavaScript).

Outro método a considerar seria a identificação de IP e nome de host (esteja ciente de que eles podem variar para usuários de discagem / IP não estático, a AOL também usa IPs gerais). No entanto, como isso apenas identifica redes, isso pode não funcionar tão bem quanto os cookies.

Ross
fonte
Bom ponto com o endereço IP identificando o ponto de acesso à rede - com o NAT, pode haver países inteiros ocultos atrás de um único endereço IP e você não seria o mais sábio. Com a falta de endereços IPv4, você ainda verá empresas ou escolas / universidades muito grandes compartilhando um único endereço IP para o tráfego de saída da Internet.
Piskvor saiu do prédio 13/10/10
6

Além das sugestões de uso de cookies, o único conjunto abrangente de atributos de identificação disponíveis para interrogação estão contidos no cabeçalho da solicitação HTTP. Portanto, é possível usar alguns subconjuntos para criar um identificador pseudo-exclusivo para um agente de usuário (por exemplo, navegador). Além disso, a maioria dessas informações já está sendo registrada no chamado "log de acesso" do software do servidor da Web por padrão e, se não, pode ser facilmente configurado para isso. Então, poderia ser desenvolvida uma utilidade que simplesmente varre o conteúdo desse log, criando impressões digitaisde cada solicitação composta por, digamos, o endereço IP e a sequência do User Agent, etc. Quanto mais dados disponíveis, inclusive o conteúdo de cookies específicos, aumentam a qualidade da exclusividade dessa impressão digital. Embora, como muitos outros já declararam, o protocolo HTTP não torne isso 100% infalível - na melhor das hipóteses, pode ser apenas um indicador bastante bom.

Danny Whitt
fonte
6

Quando uso uma máquina que nunca visitou meu site de serviços bancários on-line, sou solicitada a autenticação adicional. então, se eu voltar pela segunda vez ao site de banco on-line, não receberão a autenticação adicional ... apaguei todos os cookies no IE e voltei a entrar no meu site de banco on-line, esperando receber novamente as perguntas de autenticação. para minha surpresa, não me perguntaram. isso não leva a acreditar que o banco está fazendo algum tipo de marcação de PC que não envolve cookies?

Esse é um tipo bastante comum de autenticação usada pelos bancos.

Digamos que você esteja acessando o site do seu banco via example-isp.com. Na primeira vez em que você estiver lá, será solicitada sua senha, além de autenticação adicional. Depois de aprovado, o banco sabe que o usuário "thatisvaliant" é autenticado para acessar o site via example-isp.com.

No futuro, ele não solicitará autenticação extra (além da sua senha) quando você estiver acessando o site via example-isp.com. Se você tentar acessar o banco via another-isp.com, o banco passará pela mesma rotina novamente.

Então, para resumir, o que o banco está identificando é seu ISP e / ou netblock, com base no seu endereço IP. Obviamente, nem todo usuário do seu ISP é você, e é por isso que o banco ainda solicita sua senha.

Você já telefonou para uma empresa de cartão de crédito para verificar se tudo está bem quando você usa um cartão de crédito em um país diferente? Mesmo conceito

Anirvan
fonte
4

Realmente, o que você deseja fazer não pode ser feito porque os protocolos não permitem isso. Se IPs estáticos foram universalmente usados, você poderá fazê-lo. Eles não são, então você não pode.

Se você realmente deseja identificar pessoas , faça com que elas efetuem login.

Como eles provavelmente estarão se movendo para páginas diferentes em seu site, você precisa de uma maneira de acompanhá-las à medida que elas se movem.

Desde que estejam logados e você acompanhe a sessão no site por meio de cookies / link-parameters / beacons / o que for, você pode ter certeza de que eles estão usando o mesmo computador durante esse período.

Por fim, é incorreto dizer que isso informa qual computador eles estão usando se seus usuários não estiverem usando sua própria rede local e não tiverem endereços IP estáticos.

Se o que você deseja fazer está sendo feito com a cooperação dos usuários e existe apenas um usuário por cookie e eles usam um único navegador da Web, basta usar um cookie.

JohnnySoftware
fonte
3

Os cookies não serão úteis para determinar visitantes únicos. Um usuário pode limpar os cookies e atualizar o site - ele é classificado como novo usuário novamente.

Eu acho que a melhor maneira de fazer isso é implementar uma solução do lado do servidor (pois você precisará de um local para armazenar seus dados). Dependendo da complexidade de suas necessidades para esses dados, você precisará determinar o que é classificado como uma visita única. Um método sensato seria permitir que um endereço IP retornasse no dia seguinte e receber uma visita única. Várias visitas de um endereço IP em um dia não devem ser contadas como únicas.

Usando o PHP, por exemplo, é trivial obter o endereço IP de um visitante e armazená-lo em um arquivo de texto (ou em um banco de dados sql).

Uma solução do lado do servidor funcionará em todas as máquinas, porque você rastreará o usuário quando ele carregar o site pela primeira vez. Não use javascript, pois isso se destina a scripts do lado do cliente, pois o usuário pode ter desativado em qualquer caso.

Espero que ajude.

diferente
fonte
4
Minha esposa e eu navegamos em quatro computadores diferentes atrás de um firewall NAT em casa. Aparecemos como tendo o mesmo IP, portanto, pelo seu esquema, mostramos o mesmo usuário.
Adam Ness
E se no mysql escrever variáveis ​​adicionais (mencionadas aqui panopticlick.eff.org/browser-uniqueness.pdf )? Portanto, o endereço IP seria o mesmo, mas algumas outras características podem ser diferentes.
21415 Andris
3

Porque eu quero que a solução funcione em todas as máquinas e em todos os navegadores (dentro do razoável), estou tentando criar uma solução usando javascript.

Não é realmente um bom motivo para não usar javascript?

Como outros já disseram - os cookies são provavelmente a sua melhor opção - apenas esteja ciente das limitações.

Draemon
fonte
3

Você pode usar o 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 
})

Depois disso, você pode verificar todos os seus usuários em relação à existente e verificar a semelhança JSON, portanto, mesmo que a impressão digital seja alterada, você ainda poderá rastreá-los

Kit de ferramentas
fonte
2

Eu acho que o veredicto é que eu não posso identificar programaticamente de forma exclusiva um computador que está visitando meu site.

Eu tenho a seguinte pergunta. Quando uso uma máquina que nunca visitou meu site de serviços bancários on-line, sou solicitada a autenticação adicional. então, se eu voltar pela segunda vez ao site de banco on-line, não me perguntam a autenticação adicional. lendo as respostas para minha pergunta, decidi que deve ser um cookie envolvido. portanto, apaguei todos os cookies no IE e entrei novamente no meu site de banco on-line, esperando receber novamente as perguntas de autenticação. para minha surpresa, não me perguntaram. isso não leva a acreditar que o banco está fazendo algum tipo de marcação de PC que não envolve cookies?

Além disso, depois de pesquisar bastante hoje, encontrei a seguinte empresa que afirma vender uma solução que identifica exclusivamente máquinas que visitam um site. http://www.the41.com/products.asp .

eu aprecio todas as boas informações, se você puder esclarecer ainda mais essas informações conflitantes que eu achei que eu aprecio muito.

thatisvaliant
fonte
Com base nisso: the41.com/download/… Parece que a solução é fazer com que o usuário baixe um software que cria um identificador exclusivo baseado na máquina e vincula-o a algumas credenciais de login.
Mmacaulay 20/10/08
Como já mencionado, você não descartou seu banco usando um cookie em Flash. Como limpar os cookies do Flash e outras discussões sobre o problema: tips.vlaurie.com/2007/10/24/…
micahwittman
Meu palpite: o banco provavelmente confia em você, se você (1) sabe seu nome de usuário, (2) sabe sua senha e (3a) possui o cookie deles ou (3b) vem de um endereço IP que já havia anteriormente associado a você.
Zack Peterson
2

Eu faria isso usando uma combinação de cookies e cookies flash. Crie um GUID e armazene-o em um cookie. Se o cookie não existir, tente lê-lo no cookie flash. Se ainda não for encontrado, crie-o e grave-o no cookie flash. Dessa forma, você pode compartilhar o mesmo GUID entre navegadores.

Eric Hogue
fonte
1

Eu acho que os cookies podem ser o que você está procurando; é assim que a maioria dos sites identifica exclusivamente os visitantes.

Steve
fonte
0

Supondo que você não queira que o usuário esteja no controle, você não pode. A web não funciona assim, o melhor que você pode esperar são algumas heurísticas.

Se for uma opção para forçar o visitante a instalar algum software e usar o TCPA, você poderá obter algo.

John Nilsson
fonte
0

Minha postagem pode não ser uma solução, mas posso fornecer um exemplo em que esse recurso foi implementado.

Se você visitar a página de inscrição www.supertorrents.orgpela primeira vez no seu computador, tudo bem. Mas se você atualizar a página ou abrir a página novamente, ele identificará que você já visitou a página. A verdadeira beleza vem aqui - identifica mesmo se você reinstalar o Windows ou outro sistema operacional.

Eu li em algum lugar que eles armazenam o ID da CPU. Embora eu não tenha conseguido descobrir como eles fazem isso, duvido seriamente e eles podem usar o Endereço MAC para fazer isso.

Definitivamente vou compartilhar se eu descobrir como fazê-lo.

Mr Programmer
fonte
www.supertorrents.org está morto
Toolkit
0

Um truque:

  1. Crie 2 páginas de registro:

    Primeira página de registro: sem nenhum email ou verificação de segurança (apenas com nome de usuário e senha)

    Segunda página de registro: com alto nível de segurança (solicitação de verificação de e-mail e imagem de segurança e etc.)

  2. Para satisfação do cliente e fácil registro, a página de registro padrão deve ser a (Primeira Página de Registro), mas na (Primeira Página de Registro) há uma restrição oculta. É restrição de IP. Se um IP tentar se registrar pela segunda vez (por exemplo, menos de 1 hora) em vez de mostrar a página de bloqueio. você pode mostrar a (Segunda página de registro) automaticamente.

  3. em (Primeira página de registro), você pode definir (por exemplo: bloquear 2 tentativas de 1 ip por apenas 1 hora ou 24 horas) e após (por exemplo) 1 hora, você pode abrir o acesso a partir desse ip automaticamente

Observe: (Primeira página de registro) e (Segunda página de registro) não devem estar em páginas separadas. você cria apenas 1 página. (por exemplo: register.php) e torne inteligente alternar entre o primeiro estilo PHP e o segundo estilo PHP

Mahdi Jazini
fonte
Mahdi Jazini .Tudo está certo, mas a minha pergunta é como você identifica o endereço IP da máquina cliente.
JENKINS J