Melhor método para evitar jogos com votação anônima

Estou prestes a escrever um método de votação para o meu site. Quero um método para impedir que as pessoas votem o mesmo duas vezes. Até agora, meus pensamentos foram:

  • Solte um cookie uma vez que o voto esteja completo (suscetível a jogos de vários navegadores)
  • Endereço IP de log por voto (isso falhará em ambientes proxy / corporativos)
  • Forçar logins

O meu site não é baseado em contas como tal, embora agregue dados do Twitter, por isso há margem para usar o Twitter OAuth como meio de identificação.

O que os sistemas existentes existem e como eles fazem isso?

   

O melhor seria proibir a votação anônima. Se o usuário for forçado a fazer login, você pode salvar o ID do usuário com cada voto e certificar-se de que ele / ela só vota uma vez.

A abordagem do cookie é muito frágil, pois os cookies podem ser excluídos facilmente. A abordagem do endereço IP tem a deficiência que você descreve.

Um passo em direção a um sistema de autenticação de usuários, mas não todas as complicações:

Obter o usuário para inserir seu endereço de e-mail e confirmar o seu voto, você não iria erradicar o jogo, mas você tornaria mais difícil para os jogadores registrarem outro endereço de e-mail e depois votar etc.

Pode valer a pena o passo extra.

Deixe-nos saber o que você vai acabar.

Se você quiser ir com cookies depois de tudo, use um evercookie .

evercookie é uma API de javascript disponível que produz cookies extremamente persistentes em um navegador . Seu objective é identificar um cliente mesmo depois de terem removido cookies padrão, cookies Flash (Objetos compartilhados locais ou LSOs) e outros.

O Evercookie consegue isso armazenando os dados de cookies em vários tipos de mecanismos de armazenamento disponíveis no navegador local. Além disso, se a evercookie encontrou que o usuário removeu qualquer tipo de cookies em questão, ele os recria usando cada mecanismo disponível.

A trapaça de vários navegadores não será afetada, é claro.

Qual tipo de jogo você quer se proteger? Alguém criando alguns bots e bombardeando você com milhares (milhões) de pedidos? Ou alguém sem coisas melhores a fazer e tentar fazer 10-20 votos?

Sim, eu sei: ambos – mas qual é sua principal preocupação aqui?

O uso do CAPTCHA juntamente com a votação baseada em e-mail (envie um link para o e-mail para validar a votação) pode funcionar bem contra bots. Mas um humano pode explorar de forma mais ou menos fácil o sistema de e-mail (como eu comento em uma resposta e postei aqui novamente)

Eu possuo um domínio personalizado e posso ter qualquer e-mail que eu queira dentro dele.

Outro exemplo: se o seu e-mail for myuser * @ gmail.com *, você pode usar “myuser+1@gmail.com” myuser+2@gmail.com, etc. (o sinal de mais e o texto depois que ele é ignorado e é entregue em sua conta). Você também pode include pontos em seu nome de usuário (my.user@gmail.com). (Isso funciona apenas em endereços do Gmail!)

Para proteger contra humanos, não conheço cookies, mas pode ser uma boa escolha. Usar OAuth integrado com o Twitter, o FB e outras redes também podem funcionar bem.

Além disso, lembre-se: exigir e-mails para alguém votar vai assustar muitas pessoas fora! Você receberá muitos votos menos!

Outra opção é limitar o número de votos que seu sistema aceita de cada ip por minuto (ou hora ou qualquer outra coisa). Para proteger contra ataques distribuídos, limite o número total de votos que seu sistema aceita dentro de um prazo.

Abordagem diferente, apenas para fornecer uma alternativa:

Supondo que a maioria das pessoas saiba como se comportar ou simplesmente não pode ser incomodado em se comportar mal, apenas limpe retroativamente os votos. Isso também continuaria votando discreto para os eleitores.

Então, crie cookies, registre cada voto e depois (ou em um intervalo de tempo?) Percorra os resultados e remova duplicatas com base nos valores de cookies, combinações IP / UserAgent etc.

Eu assumiria que não bloquear ativamente vários votos da mesma pessoa mantém o uso de methods de evasão altamente técnicos ao mínimo e os resultados são fáceis de limpar.

Como um lado negativo, você provavelmente não pode mostrar as contagens de votos reais ao vivo na interface do usuário, ou as sobrancelhas serão levantadas quando um monte de votos simplesmente desaparecer.

Embora eu provavelmente não faria isso sozinho, mas olhe esses cookies, eles são muito difíceis de se livrar de:

http://samy.pl/evercookie/

Uma maneira diferente de abordar esse problema e combater a fraude de votação era exigir um endereço de e-mail, uma pessoa ainda poderia votar, mas os votos não contariam até que eles clicassem em um link no e-mail. Isso foi mais fácil do que completo no registro, mas ainda era muito eficaz na eliminação da maioria dos votos fraudulentos.

Se você não quiser forçar os usuários a registrar, considere este evercookie, mas force o script java para habilitar o registro!

Este evercookie é trivial para bloquear porque é baseado no script java. O invasor provavelmente não usaria navegador, com curvas ele poderia gerar todos os pedidos. Hovewer, tais ferramentas, geralmente têm suporte para javascript.

O correio é ainda mais fácil de trapacear. Quando você executa seu próprio servidor, você pode aceitar todos os endereços de e-mail, para que você tenha um conjunto de endereços praticamente ilimitado para usar.