Que opções existem para detectar rastreadores da web que não desejam ser detectados?
(Eu sei que as técnicas de detecção de listagem permitirão ao programador inteligente de rastreamento furtivo fazer uma aranha melhor, mas não acho que algum dia seremos capazes de bloquear rastreadores furtivos inteligentes, apenas aqueles que cometem erros.)
Não estou falando sobre os bons rastreadores como o googlebot e o Yahoo! Slurp. Eu considero um bot legal se ele:
- identifica-se como um bot na string do agente do usuário
- lê o robots.txt (e o obedece)
Estou falando sobre o rastreadores ruins , escondidos atrás de agentes de usuários comuns, usando minha largura de banda e nunca me dando nada em troca.
Existem alguns alçapões que podem ser construídos em uma lista atualizada (obrigado Chris, gs) :
- Adicionar um diretório listado apenas (marcado como não permitir) no robots.txt,
- Adicionando links invisíveis (possivelmente marcados como rel = "nofollow"?),
- estilo = "exibir: nenhum;" no link ou container pai
- colocado abaixo de outro elemento com maior índice z
- detectar quem não entende a capitalização,
- detectar quem tenta postar respostas, mas sempre falha no Captcha.
- detectar solicitações GET para recursos somente POST
- detectar intervalo entre pedidos
- detectar a ordem das páginas solicitadas
- detectar quem (de forma consistente) solicita recursos https em http
- detectar quem não solicita o arquivo de imagem (isso em combinação com uma lista de agentes de usuário de navegadores com capacidade de imagem conhecidos funciona surpreendentemente bem)
Algumas armadilhas seriam acionadas por bots 'bons' e 'ruins'. você pode combiná-los com uma lista de permissões:
- Isso desencadeia uma armadilha
- É pedido
robots.txt
? - Ele não acionou outra armadilha porque obedeceu
robots.txt
Outra coisa importante aqui é:
considere pessoas cegas usando leitores de tela: dê às pessoas uma maneira de entrar em contato com você ou resolva um Captcha (sem imagem) para continuar navegando.
Quais métodos existem para detectar automaticamente os rastreadores da web que tentam se mascarar como visitantes humanos normais.
Atualizar
A questão não é: Como faço para capturar todos os rastreadores. A questão é: como posso maximizar a chance de detectar um rastreador.
Alguns spiders são realmente bons e realmente analisam e entendem html, xhtml, css javascript, script VB etc ...
Não tenho ilusões: não vou conseguir vencê-los.
No entanto, você ficaria surpreso com o quão estúpidos alguns rastreadores são. Com o melhor exemplo de estupidez (na minha opinião) sendo: lançar todos os URLs para minúsculas antes de solicitá-los.
E então há um monte de rastreadores que 'não são bons o suficiente' para evitar os vários alçapões.
fonte
Veja o Projeto Honeypot - eles estão configurando bot traps em grande escala (e têm DNSRBL com seus IPs).
Use URLs e HTML complicados:
Em HTML, você pode usar muitos truques com comentários, elementos CDATA, entidades, etc:
fonte
Uma solução fácil é criar um link e torná-lo invisível
É claro que você deve esperar que algumas pessoas que olham o código-fonte sigam esse link apenas para ver aonde ele leva. Mas você poderia apresentar a esses usuários um captcha ...
É claro que rastreadores válidos também seguiriam o link. Mas você não deve implementar um rel = nofollow, mas procurar o sinal de um rastreador válido. (como o agente de usuário)
fonte
Uma coisa que você não listou são usados comumente para detectar rastreadores ruins.
Velocidade de acerto, bons rastreadores da web dividirão seus acessos para não inundar um site com solicitações. Os ruins farão uma das três coisas:
Além disso, alguns programas de navegação offline irão engolir várias páginas, não tenho certeza de que tipo de limite você deseja usar para começar a bloquear por endereço IP.
Este método também detectará programas de espelhamento como fmirror ou wget.
Se o bot randomiza o intervalo de tempo, você pode verificar se os links são percorridos de maneira sequencial ou profunda, ou pode ver se o bot está percorrendo uma grande quantidade de texto (como em palavras para ler) em um período de tempo muito curto. Alguns sites também limitam o número de solicitações por hora.
Na verdade, ouvi uma ideia em algum lugar, não me lembro de onde, que se um usuário obtiver muitos dados, em termos de kilobytes, pode ser apresentado um captcha para ele provar que não é um bot. Eu nunca vi isso implementado.
Atualização sobre links ocultosNo que diz respeito a ocultar links, você pode colocar um div sob outro, com CSS (colocando-o primeiro na ordem de desenho) e possivelmente definindo a ordem z. Um bot não poderia ignorar isso, sem analisar todo o seu javascript para ver se é um menu. Até certo ponto, os links dentro de elementos DIV invisíveis também não podem ser ignorados sem que o bot analise todo o javascript.
Levando essa ideia à sua conclusão, o javascript não chamado, que poderia mostrar os elementos ocultos, poderia enganar um subconjunto de bots de análise de javascript. E não é muito trabalho para implementar.
fonte
Um método simples de detecção de bot que ouvi para formulários é a técnica de entrada oculta. Se você está tentando proteger um formulário, coloque uma entrada no formulário com um id que pareça completamente legítimo. Em seguida, use css em um arquivo externo para ocultá-lo. Ou se você for realmente paranóico, configure algo como o jquery para ocultar a caixa de entrada no carregamento da página. Se você fizer isso direito, imagino que seria muito difícil para um bot descobrir. Você sabe que esses bots têm por natureza preencher tudo em uma página, especialmente se você fornecer à sua entrada oculta uma id de algo como id = "fname", etc.
fonte
Na verdade, não é tão fácil acompanhar as boas strings do agente do usuário. As versões do navegador vêm e vão. Fazer uma estatística sobre strings de agente de usuário por diferentes comportamentos pode revelar coisas interessantes.
Não sei até que ponto isso poderia ser automatizado, mas pelo menos é um diferencial.
fonte
Não testado, mas aqui está uma boa lista de user agents dos quais você pode fazer uma expressão regular. Pode levar você a maior parte do caminho:
Retirado de: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/
fonte
Você também pode verificar referências. Nenhuma referência poderia levantar suspeitas de bot. Referência ruim significa que certamente não é um navegador.
Eu não faria isso. Você pode acabar na lista negra do Google para SEO de chapéu preto :)
fonte
Atualmente trabalho para uma empresa que faz a varredura de sites para classificá-los. Também verificamos os sites em busca de malware.
Na minha experiência, os bloqueadores número um de nosso rastreador da web (que obviamente usa um IE ou Firefox UA e não obedece ao robots.txt. Dãããããããããããããao) são sites que hospedam malware intencionalmente. É uma dor porque o site então volta para um humano que tem que carregar manualmente o site, classificá-lo e verificar se há malware.
Só estou dizendo que, ao bloquear os rastreadores da web, você está se colocando em más companhias.
Claro, se eles são terrivelmente rudes e sugam toneladas de sua largura de banda, a história é diferente, porque você tem um bom motivo.
fonte
As pessoas continuam abordando rastreadores abrangentes, mas não rastreadores especializados para o seu site.
Eu escrevo rastreadores invisíveis e se eles forem construídos individualmente, nenhuma quantidade de potes de mel ou links ocultos terão qualquer efeito - a única maneira real de detectar rastreadores especializados é inspecionando os padrões de conexão.
Os melhores sistemas usam AI (por exemplo, Linkedin) usam AI para resolver isso.
A solução mais fácil é escrever analisadores de log que analisam as conexões IP e simplesmente listam esses IPs ou fornecem captcha, pelo menos temporário.
por exemplo,
se o IP X for visto a cada 2 segundos conectando-se,
foo.com/cars/*.html
mas não a qualquer outra página - é mais provável que seja um bot ou um usuário avançado faminto.Alternativamente, existem vários desafios de javascript que atuam como proteção (por exemplo, o sistema anti-bot da Cloudflare), mas esses são facilmente solucionáveis, você pode escrever algo personalizado e isso pode ser dissuasor o suficiente para fazer com que o esforço do rastreador não valha a pena.
No entanto, você deve fazer uma pergunta se está disposto a usuários legítimos falso-positivos e apresentar inconveniências para eles para evitar o tráfego de bot. Proteger dados públicos é um paradoxo impossível.
fonte
resposta curta: se um programador de nível médio sabe o que está fazendo, você não será capaz de detectar um rastreador sem afetar o usuário real. Tendo suas informações publicamente, você não poderá defendê-las contra um rastreador ... é como a 1ª emenda à direita :)
fonte