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.
javascript
cookies
browser
thatisvaliant
fonte
fonte
Respostas:
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
fonte
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:
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:
Vantagens do rastreamento baseado em sessão:
username
/password
/email
.sessionID
.Desvantagens do rastreamento baseado em sessão:
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.cookie
ewindow.localStorage
: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:
e desvantagens:
UUIDS
Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
getISP(requestIP)|getHTTPSClientKey()
FingerPrint.get()
BrowserID|ComputerID|randombytes(256)
__utma
cookies.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:
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)
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
SessionID
valor as para o cabeçalho etag:Last-Modified
O cabeçalho informa ao navegador que esse arquivo basicamente nunca é modificado.Cache-Control
informa 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-Since
eIf-None-Match
cabeçalhos. Podemos usá-los para retornar uma304 Not Modified
resposta.example.com/assets/js/tracking.php
Agora, toda vez que o navegador solicitar,
tracking.js
nosso servidor responderá com um304 Not Modified
resultado e forçará a execução da cópia local detracking.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.js
no cache do navegador. Quando o navegador solicita,tracking.js
ele recebe uma304 Not Modified
resposta que faz com que execute a 1ª versãotracking.js
recebida.tracking.js
executa e restaura oSessionID
que 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
SessionID
was:Podemos mudar isso para:
Onde
hk = sign(Timestamp|BrowserID|ComputerID, serverKey)
.Agora podemos validar nosso
SessionID
usando o seguinte algoritmo:Agora, para que o ataque da Haxor funcione, eles devem:
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).BrowserID
. Qualquer pessoa pode falsificar a sequência do agente do usuário (irritante).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
GoogleID
eFingerprintID
(via ajax ou campos ocultos) e comparando com esses.fonte
storageFacade.setItem
e 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.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.
fonte
Uma possibilidade é usar 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.
fonte
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.
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!
fonte
Click to rediscover cookies
e ver nulo ou indefinido. Portanto, isso não funciona para mimExiste 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:
fonte
Há apenas uma pequena quantidade de informações que você pode obter por meio de uma conexão HTTP.
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.
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.
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.
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.
fonte
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
__utma
valor 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 .fonte
getUniqueId()
diferentes navegadores na mesma máquina?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.
fonte
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.
fonte
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
fonte
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.
fonte
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.
fonte
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.
fonte
Você pode usar o fingerprintjs2
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
fonte
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.
fonte
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.
fonte
Eu acho que os cookies podem ser o que você está procurando; é assim que a maioria dos sites identifica exclusivamente os visitantes.
fonte
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.
fonte
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.org
pela 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.
fonte
Um truque:
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.)
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.
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
fonte