nginx bloco curl e wget

4

Eu tenho o servidor nginx.
Eu tenho um site de conteúdo rico e descobri que alguns bots maliciosos estão tentando rastrear meu conteúdo. Eu bloqueei qualquer curl ou wget vindo ao meu site como este

if ($http_user_agent ~* (curl|wget)) { return  301 $scheme://www.google.com/; }

mas descobri que posso acessar o conteúdo se eu alterei o - user-agent na solicitação de curl como abaixo

curl --user-agent "Googlebot/2.1 (+http://www.google.com/bot.html)" http://example.com/mypage.php
OR
curl --user-agent "whatever" http://example.com/mypage.php

Alguma ideia de como eu poderia bloquear qualquer solicitação gerada a partir de curl ou wget usando Nginx , independentemente do agente de usuário falso que foi enviado

    
por Alaa Alomari 17.05.2017 / 21:20

3 respostas

4

User-Agent

O User-Agent sempre pode ser falsificado. Existem outros cabeçalhos que você pode checar, mas robôs mais espertos também os enganam. por exemplo. Accept, Accept-Language, Connection e alguns outros que nem sempre são usados por tipo de objeto

Cookies

Bots menos inteligentes não aceitarão e enviarão cookies adequadamente, para que você possa proteger alguns recursos usando cookies. Isso pode ter implicações de privacidade que você deve considerar.

Javascript

Alguns bots não conseguem processar o javascript. Você pode ter um "quebra-cabeça" de javascript oculto, por assim dizer, que requer que o navegador calcule a resposta para um problema matemático aleatório simples. Isso quebrará muitos Restful Clients da API, a menos que você encontre uma maneira inteligente de excluí-los.

Autenticação

Se você tem recursos dos quais deseja manter os robôs, então você precisará proteger esses recursos com autenticação.

Manter ativo

Se tiver certeza de que todos que acessam seu site apoiarão o keep-alive; incluindo proxies, então você pode bloquear conexões que não suportam isso. Alguns encontrarão esta opção unorthadox.

Opções obscuras que também podem limitar os browers e / ou os clientes da API

Eu também descobri que alguns bots não lidam com TLS1.2 + SNI, já que eles geralmente usam bibliotecas mais antigas que não suportam TLS1.2 e ainda menos comuns, SNI. Isso limitará a capacidade de seus usuários acessarem as APIs em seu site, se isso for relevante.

Deixarei para você pesquisar como você pode testar e implementar cada uma dessas coisas e quais delas podem ou não ser apropriadas. Um tamanho não serve para todos.

    
por 17.05.2017 / 21:52
1

Roubado de StackOverflow , você pode colocar um URL em seu site que não seja acessível por meio de um link, mas quando um rastreador o vir, ele tentará rastrear esse endereço. Isso permitiria bloquear esse rastreador.

<a style="display:none" href="./dontgohere.php">A</a>

Depois de ter seus IPs listados, você pode usar algo ngx_http_access_module para bloquear endereços ou até mesmo fail2ban. Existem algumas soluções diferentes com as quais você pode prosseguir.

Se você estiver bloqueando estritamente as strings do agente do usuário, não será possível, como diz Alexander.

    
por 17.05.2017 / 21:43
0

Isso não é possível. curl e wget poderiam colocar qualquer user agent e não há possibilidade de saber quem está rastreando seu site.

    
por 17.05.2017 / 21:41

Tags