Eu não posso prometer a você "com sucesso, permanentemente", mas certamente há muitas coisas que você pode fazer para tornar sua vida mais difícil. Chega disso e ele desistirá.
Você já tentou usar o endereço IP dele para identificação, mas é fácil encontrar servidores proxy gratuitos. É um pouco mais difícil encontrar servidores proxy e anônimos gratuitos. A maioria dos servidores proxy envia o endereço IP do usuário ao longo de um cabeçalho X-Forwarded-For:
. Você pode usar mod_security
para bloqueá-los.
SecRule REQUEST_HEADERS:X-Forwarded-For "@Contains 192.168.0.1"
Obviamente, você deve substituir 192.168.0.1
pelo seu endereço IP real. Você pode bloquear um conjunto maior de IPs com proxy removendo o último octeto.
Isso o limitará a usar proxies anônimos e o Tor. Você pode identificar quando ele está usando o Tor, porque todas as solicitações virão de um endereço IP diferente e provavelmente estarão todas em uma lista de nós de saída do Tor. Aqui estão dois exemplos de listas. Também há listas de proxy disponíveis.
Você pode forçá-lo a ignorar o proxy para apenas uma subsequest usando Flash ou Javascript ou até mesmo apenas um link de imagem. Isso depende de como o proxy é configurado em seu computador (você pode colocá-lo no navegador ou no SO ou tê-lo como um proxy transparente na rede), mas, seja qual for o tipo, ele provavelmente é apenas um proxy para as portas 80 e 443. Faça com que seu site faça com que ele se conecte à porta 8080 ou à porta 25 ou a outra coisa e codifique um identificador exclusivo na solicitação. Isso faria o truque no PHP:
echo("<img src=\"http://example.com:25/".session_id().".jpg\" />");
O próximo passo que vou dar é usar o EverCookies . Dependendo de quão bom ele é em remover todos os vários métodos de armazenamento, isso por si só pode ser suficiente para identificá-lo de maneira confiável. Ele pode evitar isso executando um navegador em uma VM e revertendo-o para um estado conhecido toda vez que ele for banido novamente ou não executando javascript, mas você terá conseguido tornar sua vida um pouco mais difícil. Você poderia usar o fato de que ele não está executando o javascript para identificá-lo.
É importante notar também que o Google Analytics atribui um identificador único no segundo "campo" (separado por pontos) do seu __utma
cookie. Se você tiver o Google Analytics e ele não excluir esse cookie, talvez você já tenha o suficiente para rastreá-lo.
Para registrar cookies (e todos os cabeçalhos HTTP), você pode usar um log forense .
Depois disso, a impressão digital do navegador é um pouco mais difícil e propensa a ambos os falsos positivos (se você ficar um pouco confuso) e falsos negativos (se você escolher apenas correspondências exatas), mas isso pode ser feito. Na verdade, seria mais eficaz se ele continuar revertendo sua VM para um estado conhecido, porque isso significará que sua impressão digital nunca muda. Ele teria que alterar a resolução de tela e o fuso horário de sua VM e os plugins instalados toda vez que fosse banido.
Mais um método: identifique o conteúdo que ele publica. Apenas o trate como um spammer normal. Alimente seus dados através de um mecanismo de aprendizado bayesiano e ensine-o a reconhecê-lo ... e, uma vez que seja bom o suficiente para reconhecer o que ele posta, proíba qualquer pessoa que posta esse tipo de conteúdo. Este tem a boa vantagem de que os falsos positivos são provavelmente pessoas que você gostaria de banir de qualquer maneira, mesmo que não sejam o mesmo cara.