Pergunta

Eu aceitei uma resposta, mas, infelizmente, eu acredito que nós está preso com a nossa pior cenário original: CAPTCHA todos na tentativa da porcaria de compra. Breve explicação: fazendas cache / Web torna impossível acompanhar hits, e qualquer solução alternativa (enviando um não-cache web-beacon, escrevendo para uma tabela unificada, etc.) retarda o site do ar pior do que os bots faria. Não é provável que algum hardware caro da Cisco ou similares que podem ajudar a um nível elevado, mas é difícil para justificar o custo, se CAPTCHA-ing todos é uma alternativa. Vou tentar uma explicação mais completa mais tarde, assim como limpar isso para futuros pesquisadores (embora outros são bem-vindos para tentar, porque é uma comunidade wiki).

Situação

Isto é sobre o saco de vendas o porcaria' sobre woot.com. Eu sou o presidente da Woot Oficina, a subsidiária da Woot que faz o design, escreve as descrições de produtos, podcasts, blogs, e os moderados fóruns. Eu trabalho com CSS / HTML e estou apenas um pouco familiarizado com outras tecnologias. I trabalhar em estreita colaboração com os desenvolvedores e falei através de todas as respostas aqui (e muitas outras ideias que tivemos).

A usabilidade é uma grande parte do meu trabalho, e tornando o site emocionante e divertido é a maior parte do resto. É aí que os três objectivos abaixo derivam. CAPTCHA danos usabilidade, e bots roubar a diversão e emoção para fora de nossas vendas porcaria.

Bots são batendo nossos dezenas de primeira página de vezes que uma segunda tela raspagem (e / ou a digitalização de nosso RSS) para a venda Random Crap. No momento em que eles vêem isso, desencadeia uma segunda fase do programa que faz logon, clica Quero One, preenche o formulário, e compra a porcaria.

Avaliação

lc :. em stackoverflow e outros sites que usam este método, eles estão quase sempre lidando com (logado) usuários autenticados, porque a tarefa a ser tentada exige que

Em Woot, anônimo (não registrado) os usuários podem ver a nossa home page. Em outras palavras, os bots Slamming pode ser não-autenticado (e essencialmente não-rastreável exceto por endereço IP).

Então, nós estamos de volta para a verificação de IPs, que a) é bastante inútil, nesta era de cloud networking e zumbis spambot e b) pega muitos inocentes dado o número de empresas que vêm de um endereço IP (para não mencionar os problemas com não-estáticos IP ISPs e hits de desempenho potenciais para tentar controlar isso).

Oh, e com as pessoas chamam de nós seria o pior cenário possível. Podemos tê-los chamá-lo?

BradC : métodos de Ned Batchelder olhar muito legal, mas eles estão muito firmemente projetado para bots derrota construídos para uma rede de sites. O nosso problema é bots são construídas especificamente para derrotar o nosso site. Alguns desses métodos poderiam trabalhar provável para um curto período de tempo até que os scripters evoluiu seus bots para ignorar o honeypot, tela-raspar para nomes de rótulo próximas em vez de IDs de formulário e usar um controle navegador compatível com JavaScript.

lc novamente : 'a menos, claro, a campanha publicitária é parte de seu esquema de marketing' Sim, definitivamente. A surpresa de quando as aparece item, bem como a emoção se você conseguir obter um é provavelmente tão ou mais importante do que a porcaria que você realmente acabar ficando. Qualquer coisa que elimine primeiro a chegar / primeiro a servir é prejudicial para a emoção de 'vencer' a porcaria.

novatrust : E eu, por exemplo , acolher os nossos novos senhores bot. Nós realmente fazer oferecem RssFeeds para permitir 3o partido apps para verificar o nosso site para informações do produto, mas não à frente da principal HTML site. Se eu estou interpretando-a direita, sua solução não ajuda a 2 (desempenho questões) por sacrificar completamente objectivo 1, e apenas renunciando ao fato de que bots estará comprando a maior parte da porcaria. Eu up-votado a sua resposta, porque o seu último parágrafo pessimismo sente precisas para mim. não parece haver nenhuma bala de prata aqui.

O resto das respostas geralmente dependem de rastreamento de IP, que, mais uma vez, parece tanto ser inútil (com botnets / zombies / networking nuvem) e prejudicial (captura de muitos inocentes que vêm de mesmas-IP destinos).

Todas as outras abordagens / idéias? Meus desenvolvedores continuo dizendo "apenas fazer CAPTCHA deixar", mas eu estou esperando há métodos menos invasivos para todos os seres humanos reais que querem alguns dos nosso excremento.

pergunta inicial

Digamos que você está vendendo barato algo que tem um valor muito alto percebido, e você tem uma quantidade muito limitada. Ninguém sabe exatamente quando você vai vender este item. E mais de um milhão de pessoas vêm regularmente para ver o que você está vendendo.

Você acaba com scripters e bots tentando programaticamente figura [a] para fora quando você está vendendo referido item, e [b] verifique se eles estão entre os primeiros a comprá-lo. Isso é péssimo, por duas razões:

  1. Seu site é batido por não-humanos, retardando tudo para baixo para todos.
  2. Os scripters acabar 'vencer' o produto, fazendo com que os frequentadores se sentir enganado.

Uma solução aparentemente óbvia é criar alguns aros para os usuários que saltar através de antes de colocar sua ordem, mas há pelo menos três problemas com isso:

  • A experiência do usuário é uma porcaria para os seres humanos, pois eles têm de decifrar CAPTCHA, escolher o gato, ou resolver um problema de matemática.
  • Se o benefício percebido é alto o suficiente, ea multidão grande o suficiente, algum grupo vai encontrar o seu caminho em torno de qualquer emenda, levando a uma corrida armamentista. (Isto é especialmente verdadeiro quanto mais simples Tweak é; escondido forma 'comentários', re-organizar os elementos de formulário, mis-rotulando-os, escondido 'pegadinha' do texto Todos os funcionará uma vez e, em seguida, precisam ser alteradas para combater visando esta forma específica .)
  • Mesmo que os criadores de scripts não pode 'resolver' o seu ajuste não impedi-los de bater sua página dianteira, e em seguida, soando um alarme para a scripter para preencher o fim, manualmente. Dado que tem a vantagem de resolver [a], eles provavelmente ainda ganhar [b] uma vez que eles vão ser os primeiros seres humanos que chegam ao fim página. Além disso, 1. ainda acontece, causando erros de servidor e uma diminuição do desempenho para todos.

Outra solução é prestar atenção para IPs que batem muitas vezes, bloqueá-los a partir do firewall, ou de outra forma impedi-los de ordenação. Esta situação poderia resolver 2. e prevenir [b], mas o impacto no desempenho da verificação de IPs é enorme e provavelmente causaria mais problemas como 1. que os scripters estavam causando por conta própria. Além disso, a possibilidade de networking e spambot zumbis nuvem faz a verificação de IP bastante inútil.

A terceira idéia, forçando o formulário de pedido para ser carregado por algum tempo (digamos, meio segundo) seria potencialmente retardar o progresso das ordens rápidas, mas, novamente, as scripters ainda seriam as primeiras pessoas, em qualquer velocidade não prejudicial para os usuários reais.

Objetivos

  1. vender o item para os seres humanos não-scripting.
  2. Mantenha o local correndo a uma velocidade não diminuiu por bots.
  3. Não discute os usuários 'normais' com todas as tarefas para completar para provar que eles são humanos.
Foi útil?

Solução

Como sobre a implementação de algo como o mesmo acontece com os CAPTCHAs?

Se você estiver usando o site normalmente, você provavelmente nunca ver um. Se acontecer para recarregar a mesma página, muitas vezes, postar comentários sucessivas muito rapidamente, ou outra coisa que dispara um alarme, fazê-los provar que eles são humanos. No seu caso, isso provavelmente seria recargas constantes da mesma página, seguindo cada link em uma página rapidamente, ou preenchendo um formulário de pedido rápido demais para ser humana.

Se eles falharem a verificação x vezes seguidas (digamos, 2 ou 3), dar esse IP de um tempo limite ou outro tal medida. Então, no final do tempo limite, despejá-los de volta para a verificação novamente.


Uma vez que você tem os usuários não registrados que acessam o site, você tem apenas IPs para ir adiante. Você pode emitir sessões para cada navegador e acompanhar de que forma se desejar. E, claro, jogar um homem-seleção se muitas sessões estão sendo (re) criado em sucessão (no caso de um bot mantém excluir o cookie).

Quanto captura inocentes demais, você pode colocar um aviso na página human-cheque: ". Esta página também pode aparecer se muitos usuários anônimos está vendo o nosso site a partir do mesmo local Nós encorajamos você a registar-se ou login para evitar isso." (Ajustar a redação de forma adequada.)

Além disso, quais são as chances de que X pessoas estão carregando a mesma página (s) ao mesmo tempo de um IP? Se eles são altos, talvez você precise de um mecanismo de gatilho diferente para o seu alarme bot.


Edit: Outra opção é se eles não conseguem muitas vezes, e você está confiante sobre a demanda do produto, para bloqueá-los e torná-los pessoalmente chamá-lo para remover o bloco

.

Tendo chamada pessoas parece ser uma medida asinino, mas faz certeza que há um lugar humano por trás do computador . A chave é ter o bloco de ser apenas no local por uma condição que quase nunca deve acontecer a menos que seja um bot (por exemplo falhar a verificação várias vezes em uma fileira). Em seguida, ele força a interação humana -. Para pegar o telefone

Em resposta ao comentário de tê-los me chamar, há, obviamente, que a troca aqui. Você está preocupado o suficiente sobre garantindo que seus usuários são humanos a aceitar um par de telefonemas quando vão em promoção? Se eu estivesse tão preocupado com um produto chegar ao usuários humanos, eu teria que tomar essa decisão, talvez sacrificar um pouco (pequena) parte do meu tempo no processo.

Uma vez que parece que você está determinado a não deixar bots começar a mão superior / bater seu site, acredito que o telefone pode ser uma boa opção. Desde que eu não fazer um lucro fora de seu produto, não tenho interesse em receber essas chamadas. Foram-lhe para compartilhar um pouco desse lucro, no entanto, I podem se interessar. Como este é o seu produto, você tem que decidir o quanto você se importa e implementar em conformidade.


As outras maneiras de liberar o bloco apenas não são tão eficazes: um tempo limite (mas iria começar a bater o seu site novamente depois, enxágüe-repeat), um longo tempo de espera (se era realmente um ser humano tentando comprar seu produto, eles estariam SOL e punidos por falhar o cheque), email (facilmente feito por bots), fax (mesmo) ou correio (leva muito tempo).

Você poderia, é claro, em vez que o aumento de tempo limite por IP para cada vez que receber um tempo limite. Apenas certifique-se que você não está punindo verdadeiros humanos inadvertidamente.

Outras dicas

Você precisa descobrir uma maneira de fazer os bots comprar o material que é imensamente caro: 12mm wingnut: $ 20. Veja quantos os bots snap up antes dos argumentistas decidir que está de jogo deles.

Utilize os lucros para comprar mais servidores e pagar por largura de banda.

A minha solução seria fazer inútil screen-scraping, colocando em um atraso de aproximadamente 10 minutos para 'bots e scripts.

Aqui está como eu faria isso:

  • Log e identificar qualquer rebatedores de repetição.

Você não precisa registrar cada endereço IP em cada hit. Apenas rastrear um em cada 20 hits ou menos. Um reincidente ainda vai aparecer em um rastreamento ocasional randomizados.

  • Mantenha um cache de sua página de cerca de 10 minutos anteriores.

  • Quando uma repetição-hitter / bot acerta seu site, dar-lhes a página em cache de idade de 10 minutos.

Eles não imediatamente saber que eles estão recebendo um site antigo. Eles serão capazes de raspá-lo, e tudo mais, mas eles não vão ganhar nenhum raças mais, porque "pessoas reais" terá 10 minutos de vantagem inicial.

Benefícios:

  • Sem problemas ou problemas para os usuários (como CAPTCHAs).
  • Implementado totalmente no lado do servidor. (Sem dependência de Javascript / Flash)
  • Servindo-se de uma página mais velho, em cache deve ser menor desempenho intensivo do que uma página ao vivo. Você pode realmente diminuir a carga em seus servidores desta maneira!

Desvantagens

  • requer acompanhamento de alguns endereços IP
  • Requer manter e manter um cache de páginas mais velhos.

O que você acha?

Dê uma olhada este artigo por Batchelder definida aqui . Seu artigo é sobre parar spambots, mas as mesmas técnicas poderiam facilmente se aplicam ao seu site.

Em vez de parar bots por ter as pessoas se identificam, podemos parar os bots, tornando difícil para eles para fazer um post bem-sucedido, ou , tendo-lhes inadvertidamente identificar -se como bots. Isso remove o fardo das pessoas, e deixa o formulário de comentário livre de visível anti-spam medidas.

Esta técnica é como eu evitar spambots neste site. Funciona. o método descrito aqui não olha para o conteúdo em tudo.

Algumas outras idéias:

  • Criar um funcionário auto-notificar mecanismo (feed RSS? Twitter?) Que as pessoas podem se inscrever para quando o produto vai na venda. Isso reduz o necessidade para as pessoas a fazer scripts.
  • Altere a sua técnica de ofuscação direita antes um novo item vai na venda. Assim, mesmo se os scripters pode escalar a corrida armamentista, eles são sempre um atrás de dia.

EDIT: Para ser totalmente clara, o artigo de Ned acima descrevem métodos para evitar a compra automatizada de itens, impedindo um BOT de atravessar os formulários para enviar um pedido. Suas técnicas não seria útil para evitar bots de screen-scraping a home page para determinar quando uma bandoleira de cenouras vem à venda. Eu não tenho certeza evitando que é realmente possível.

No que diz respeito aos seus comentários sobre a eficácia das estratégias de Ned: Sim, ele discute honeypots, mas eu não acho que é a sua estratégia mais forte. Sua discussão da SPINNER é a razão original eu mencionou seu artigo. Desculpe eu não fazer isso mais claro no meu post original:

O spinner é um campo oculto usado para algumas coisas: é hashes juntos um número de valores que impedem adulteração e repetições, e é usado para nomes de campos obscuros. O elemento rotativo é um Hash MD5 de:

  • O timestamp,
  • O endereço IP do cliente,
  • A identificação de entrada da entrada do blog que está sendo comentados, e
  • Um segredo.

Aqui está como você poderia implementar que pelo WOOT.com:

Altere o valor "secreto" que é usado como parte do hash cada vez que um novo item vai na venda. Isto significa que se alguém está indo para projetar um BOT aos itens auto-compra, seria só funcionam até o próximo item vem à venda !!

Mesmo se alguém é capaz de rapidamente re-construir o seu bot, todos os outros usuários reais já terá comprado um BOC, e seu problema está resolvido!

A outra estratégia que ele discute é a mudança a técnica honeypot ao longo do tempo (mais uma vez, alterá-lo quando um novo item vai à venda):

  • Usar classes CSS (randomizados, é claro) para definir os campos ou um elemento que contém a exibição: Não.
  • Color dos campos o mesmo (ou muito semelhante) ao fundo da página.
  • Use o posicionamento para mover um campo fora da área visível da página.
  • Faça um elemento muito pequeno para mostrar o campo honeypot contido.
  • Deixe os campos visíveis, mas o uso de posicionamento para cobri-los com um elemento obscurecer.
  • Use o Javascript para efetuar qualquer uma destas alterações, exigindo um bot para ter um motor de Javascript completo.
  • Deixe as honeypots exibido como os outros campos, mas dizer às pessoas para não introduzir nada dentro deles.

Eu acho que a minha ideia geral é o de alterar o design FORM quando cada novo item vai na venda. Ou, pelo menos, alterá-lo quando uma nova BOC vai à venda.

O que é o que, a par de vezes / mês?

Se você aceitar essa resposta, você vai me dar um heads-up sobre quando a próxima é devido? :)

Q: Como você parar scripters de bater seu site centenas de vezes por segundo
? A: Você não. Não há maneira de evitar este comportamento por agentes externos.

Você poderia empregar um vasto conjunto de tecnologia para analisar os pedidos recebidos e heuristicamente tentar determinar quem é e não é humano ... mas seria um fracasso. Eventualmente, se não imediatamente.

A única solução viável a longo prazo é a mudar o jogo para que o site não é amigável-bot, ou seja menos atraente para scripters.

Como você faz isso? Bem, isso é uma questão diferente! ; -)

...

OK, algumas opções foram dadas (e rejeitado) acima. Eu não sou muito familiarizado com o seu site, tendo olhou para ele apenas uma vez, mas desde que as pessoas podem ler o texto em imagens e bots não pode facilmente fazer isso, alterar o anúncio para ser uma imagem. Não é um CAPTCHA , apenas uma imagem -

  • gerar a imagem (em cache é claro) quando a página é solicitada
  • manter o nome da fonte de imagem da mesma, de modo que não entregar o jogo
  • na maioria das vezes a imagem terá texto comum nele, e estar alinhado com parecem ser parte da página HTML A
  • quando o jogo está 'on', a imagem muda para o texto do anúncio
  • o texto do anúncio revela uma url e / ou código de que deve ser inserida manualmente para adquirir o prêmio. CAPTCHA o código se você gosta, mas que provavelmente não é necessário.
  • Para segurança adicional, o código pode ser um one-time de token gerado especificamente para o pedido / IP / agente, de modo que repetidos pedidos gerar códigos diferentes. Ou você pode pré-gerar um monte de códigos aleatórios (a one-time pad) se sob demanda geração é muito desgastante.

Run Time-julgamentos de pessoas reais que respondem a este e ignorar ( 'oops, ocorreu um erro, desculpe! Por favor, tente novamente') respostas mais rápido do que (digamos) metade deste tempo. Este evento também deve disparar um alerta para os desenvolvedores que pelo menos um bot descobriu o código / jogo, por isso é hora de mudar o código / jogo.

Continuar para mudar o jogo periodicamente de qualquer maneira, mesmo que não bots provocá-lo, apenas para desperdiçar o tempo dos scripters. Eventualmente, os scripters deve pneu do jogo e ir para outro lugar ... nós esperamos; -)

Uma sugestão final: quando um pedido para a sua página principal vem, colocá-lo em uma fila e responder aos pedidos em ordem em um processo separado (você pode ter que cortar / estender a web servidor para fazer isso, mas ele provavelmente vai valer a pena). Se outra solicitação a partir do mesmo IP / agente de vem em quando a primeira solicitação está na fila, ignorá-lo. Isto deve lançar automaticamente a carga dos bots.

EDIT: outra opção, além do uso de imagens, é usar javascript para preencher o buy / texto no-buy; bots raramente interpretar javascript, então eles não iria vê-lo

Eu não sei como isso é possível:. ... ir para a ofensiva

Descobrir quais dados os bots está digitalizando para. Alimentá-los os dados que eles estão procurando quando você não está vendendo a porcaria. Fazer isso de uma forma que não vai incomodar ou confundir os usuários humanos. Quando os bots desencadear a fase dois, eles vão entrar e preencher o formulário de comprar US $ 100 Roombas em vez de BOC. Claro, isso pressupõe que os bots não são particularmente robusto.

Outra idéia é implementar preço aleatória cai ao longo do saco o período de merda venda. Quem iria comprar um saco o porcaria aleatória por US $ 150 quando você indicar claramente que é apenas US $ 20? Ninguém, mas bots excesso de zelo. Mas, em seguida, 9 minutos depois é US $ 35 dólares ... em seguida, 17 minutos depois é $ 9. Ou o que quer.

Claro, os reis zumbis seria capaz de reagir. O ponto é fazer com que seus erros se tornar muito caro para eles (e para fazê-los pagar para combatê-los).

Tudo isso pressupõe que você quer irritar alguns senhores bot, que pode não ser 100% aconselhável.

Então, o problema realmente parece ser: os bots querem seu "saco 'o crap" porque tem um alto valor percebido em uma baixa percepção de preços. Você às vezes oferecem este item e os bots se escondem, esperando para ver se ele está disponível e, em seguida, eles compram o item.

Uma vez que parece que os donos de bots estão fazendo um lucro (ou potencialmente fazer um lucro), o truque é fazer com que este inútil para eles, incentivando -los a comprar a porcaria.

Primeiro, sempre oferecer o "saco 'o lixo".

Em segundo lugar, certifique-se de que porcaria é geralmente porcaria.

Em terceiro lugar, girar a porcaria freqüentemente.

Simples, não?

Você vai precisar de uma permanente "porque é nosso excremento, às vezes porcaria?" link ao lado da oferta para explicar aos seres humanos o que está acontecendo.

Quando o bot vê que há porcaria e a porcaria é adquirido automaticamente, o destinatário vai ser terrivelmente chateado que eles pagaram US $ 10 para um palito quebrado. E, em seguida, um saco de lixo vazio. E então alguma sujeira do fundo do seu sapato.

Se comprar o suficiente desta porcaria em um período relativamente curto de tempo (e você tem grandes renúncias todo o lugar explicando por que você está fazendo isso), eles vão perder um "saco 'o dinheiro" justo em seu "saco 'o crap". Mesmo a intervenção humana por parte deles (verificação para garantir que o lixo não é uma porcaria) pode falhar se você girar a porcaria com freqüência suficiente. Heck, talvez os bots vai notar e não comprar qualquer coisa que tem sido na rotação para um tempo muito curto, mas isso significa que os seres humanos vai comprar o não-lixo.

Heck, seus clientes regulares pode ser tão divertido que você pode transformar isso em uma grande vitória marketing. postagem início quanto da carpa "crap" está sendo vendido. As pessoas vão voltar só para ver o quão duro os bots foram mordido.

Update: eu espero que você pode obter algumas chamadas na frente com pessoas reclamando. Eu não acho que você pode parar que inteiramente. No entanto, se este mata os bots, você sempre pode pará-lo e reiniciá-lo mais tarde.

  1. vender o item para os seres humanos não-scripting.

  2. Mantenha o local correndo a uma velocidade não diminuiu por bots.

  3. Não discute os usuários 'normais' com todas as tarefas para completar para provar que eles são humanos.

Você provavelmente não quer ouvir isso, mas # 1 e # 3 são mutuamente exclusivas.

Na Internet, ninguém sabe que você é um cachorro

Bem, ninguém sabe que você é um bot também. Não há nenhuma maneira programática para contar a se há ou não é um ser humano do outro lado da conexão sem exigir a pessoa a fazer alguma coisa. Impedindo os scripts / bots de fazer coisas na web é toda a razão CAPTCHAs foram inventadas. Não é como se isso é algum novo problema que não tem visto um grande esforço dispendido sobre ela. Se houvesse uma maneira melhor de fazê-lo, que não envolvem o incômodo para os usuários reais que um CAPTCHA faz, todos estariam usando já.

Eu acho que você precisa encarar o fato de que, se você quer manter bots fora de sua página de encomenda, uma boa CAPTCHA é a única maneira de fazê-lo. Se a demanda por seu lixo aleatório é alta o suficiente para que as pessoas estão dispostas a ir a estes comprimentos de obtê-lo, os usuários legítimos não vão ser adiadas por um CAPTCHA.

O método Woot usa para combater este problema está mudando o jogo - literalmente. Quando apresentam um item extremamente desejável para venda, eles fazem os usuários jogar um jogo de vídeo, a fim de encomendá-lo.

Não só que os bots de combate com sucesso (eles podem facilmente fazer pequenas alterações para o jogo para evitar jogadores automáticas, ou mesmo fornecer um novo jogo para cada venda), mas também dá a impressão de que os usuários de "ganhar" o item desejado enquanto a abrandar o processo de encomenda.

Ele ainda vende muito rapidamente, mas eu acho que a solução é bom -. Re-avaliar o problema e alterar os parâmetros levaram a uma estratégia bem sucedida onde as soluções estritamente técnicas simplesmente não existia


Seu modelo de negócio inteiro é baseado em "primeiro a chegar, primeiro a ser servido". Você não pode fazer o que as estações de rádio que (eles já não fazem a primeira chamada do vencedor, eles fazem o 5º ou 20º ou 13º chamador o vencedor) - que não coincide com a sua principal característica

.

Não, não há nenhuma maneira de fazer isso sem alterar a experiência de ordenação para os usuários reais.

Digamos que você implementar todas essas táticas. Se eu decidir que isso é importante, eu vou simplesmente obter 100 pessoas para trabalhar comigo, vamos construir software para trabalhar em nossos 100 computadores separados, e bateu seu site 20 vezes por segundo (5 segundos entre os acessos para cada usuário / cookies / conta / endereço IP).

Você tem duas etapas:

  1. página Assistindo
  2. Ordenação

Você não pode colocar um captcha bloqueando # 1 - ( "?!? O que eu tenho que resolver um captcha cada vez que eu quero ver o mais recente woot"). Que vai perder clientes reais

Assim, meus grupos pequenos relógios, programado em conjunto para que obter cerca de 20 cheques por segundo, e quem vê a mudança primeiros alertas todos os outros (automaticamente), que irá carregar a primeira página, mais uma vez, seguem a ligação da ordem, e executar a transação (que também pode acontecer automaticamente, a menos que você implementar captcha e alterá-lo para cada wootoff / boc).

Você pode colocar um captcha em frente # 2, e enquanto você está relutante em fazê-lo, que pode ser a única maneira de certificar-se de que, mesmo se bots assistir a primeira página, os usuários reais estão recebendo os produtos.

Mas mesmo com captcha meu pequeno grupo de 100 ainda teria uma vantagem significativa motor - e não há nenhuma maneira que você pode dizer que não somos seres humanos. Se você começar a cronometragem nossos acessos, tínhamos acabado de adicionar um pouco de jitter. Poderíamos escolher aleatoriamente qual computador foi para atualizar assim que a ordem de acessos muda constantemente -., Mas ainda parece bastante como um ser humano

Em primeiro lugar, se livrar dos bots simples

Você precisa ter um firewall adaptativo que vai assistir solicitações e se alguém está fazendo a coisa estúpida óbvio - refrescante mais de uma vez por segundo, ao mesmo IP, em seguida, as táticas empregadas para atrasá-los (os pacotes de queda, enviar de volta recusado ou 500 erros, etc).

Isto deve cair significativamente o seu tráfego e alterar as táticas a empregar usuários bot.

Em segundo lugar, fazer o servidor incrivelmente rápido.

Você realmente não quer ouvir isso ... mas ...

Eu acho que o que você precisa é uma solução totalmente personalizada a partir do-se inferior.

Você não precisa mexer com a pilha TCP / IP, mas você pode precisar para desenvolver um servidor personalizado muito, muito, muito rápido que é construído propositadamente para conexões de usuários correlacionar e reagir adequadamente a vários ataques.

Apache, lighthttpd, etc são todos grandes para ser flexível, mas você executar um único site propósito, e você realmente precisa para ser capaz de tanto fazer mais do que os servidores atuais são capazes de fazer (tanto em lidar com o tráfego, e em combater adequadamente bots).

Ao servir uma página web em grande parte estático (atualiza a cada 30 segundos ou menos) em um servidor personalizado que você deve não só ser capaz de lidar com 10x o número de pedidos e tráfego (porque o servidor não está fazendo nada além de obter o pedido e lendo a página da memória para o buffer TCP / IP) but ele também lhe dará acesso a métricas que podem ajudá-lo abrandar bots. Por exemplo, correlacionando os endereços IP você pode simplesmente bloquear mais de uma conexão por segundo por IP. Os seres humanos não podem ir mais rápido do que isso, e mesmo as pessoas que usam o mesmo endereço IP NAT só raramente ser bloqueado. Você gostaria de fazer um bloco lento - deixar a conexão sozinho por um segundo inteiro antes de terminar oficialmente a sessão. Isso pode alimentar em um firewall para dar blocos de longo prazo para os infratores especialmente flagrantes.

Mas a realidade é que não importa o que você faz, não há nenhuma maneira de dizer um ser humano para além de um bot quando o bot é personalizado construído por um ser humano para uma única finalidade. O bot é apenas um proxy para o ser humano.

Conclusão

No final do dia, você não pode dizer a um humano e um computador separado para assistir a primeira página. Você pode parar de bots na etapa de ordenação, mas os usuários bot ainda tem uma vantagem de antecipação, e você ainda tem uma carga enorme de gerir.

Você pode adicionar blocos para os bots simples, o que elevará a barra e menos pessoas com preocupar com isso. Isso pode ser suficiente.

Mas, sem alterar o seu modelo básico, você está sem sorte. O melhor que você pode fazer é cuidar dos casos simples, fazer o servidor usuários tão rápido regulares não aviso prévio e vender tantos itens que, mesmo se você tem alguns milhões de bots, como muitos usuários regulares como quer que eles vão buscá-los .

Você pode considerar a criação de um honeypot e marcação contas de usuários como usuários bot, mas que terá uma folga enorme comunidade negativo.

Cada vez que penso de um "bem, o que fazer sobre isso ..." Eu posso sempre contra ele com uma estratégia bot adequado.

Mesmo que você faça a primeira página de um captcha para chegar à página de encomenda ( "botão de ordenação deste artigo é azul com brilhos rosa, em algum lugar esta página") os bots irá simplesmente abrir todos os links na página, eo uso qualquer um que volta com uma página de encomenda. Isso é apenas nenhuma maneira de vencer esta.

Faça os servidores rápido, colocar em um reCaptcha (o único que eu descobri que não pode ser facilmente enganado, mas é provavelmente muito lento para sua aplicação) na página de encomenda, e pensar em maneiras de mudar o modelo utilizadores ligeiramente tão regulares têm uma chance tão boa como os usuários do bot.

-Adam

Disclaimer: Esta resposta é completamente não-relacionadas com a programação. É, no entanto, tentar atacar a razão para scripts em primeiro lugar.

Outra idéia é se você realmente tem uma quantidade limitada para vender, por que não mudá-lo a partir de um primeiro a chegar, primeiro a ser servido metodologia? A menos, claro, a campanha publicitária é parte de seu esquema de marketing.

Existem muitas outras opções, e tenho certeza que os outros podem pensar de alguns diferentes:

  • uma fila de pedidos (pré-encomenda do sistema) -. Alguns scripts ainda pode acabar na frente da fila, mas é provavelmente mais rápido para apenas inserir manualmente a informação

  • um sistema de sorteio (todos que tenta uma ordem é inserida no sistema) -. Desta forma, as pessoas com os scripts têm apenas as mesmas chances que aqueles sem

  • pressa fila de prioridade - Se houver realmente um alto valor percebido, as pessoas podem estar dispostos a pagar mais. Implementar uma fila de pedidos, mas permitem que as pessoas a pagar mais para ter maior colocação na fila.

  • leilão (crédito vai para David Schmitt para este, observações são minhas) - As pessoas ainda podem usar scripts para snipe em no último minuto, mas não só mudar a estrutura de preços, as pessoas estão à espera de ser combatê-la com outros. Você também pode fazer coisas para restringir o número de ofertas em um determinado período de tempo, fazer as pessoas telefone em frente do tempo para um código de autorização, etc.

Não importa como garantir os nazistas pensaram que suas comunicações eram, os aliados, muitas vezes quebrar as suas mensagens. Não importa como você tentar parar bots de usar seu site os proprietários bot irá trabalhar para fora uma maneira de contornar isso. Lamento se isso faz-lhe o nazista: -)

Eu acho que uma mentalidade diferente é necessária

  • Não tente parar bots de usar seu site
  • Não vá para uma correção que funciona imediatamente, jogar o jogo longo

entrar na mentalidade de que não importa se o cliente do seu site é um humano ou um bot, ambos são apenas clientes pagantes; mas um tem uma vantagem injusta sobre os outros. Alguns usuários sem muito de uma vida social (eremitas) pode ser tão irritante para outros usuários do seu site como bots.

Gravar o tempo que você publicar uma oferta e o tempo que uma conta opta para comprá-lo.

Isto dá-lhe um registro de como rapidamente o cliente está comprando coisas.

Variar a hora do dia você publicar ofertas.

Por exemplo, tem uma janela de três horas começando em algum momento obscuro da dia (meia-noite?) Somente bots e eremitas constantemente atualizar uma página para 3 horas apenas para obter uma ordem de dentro segundos. Nunca variar o tempo de base, apenas o tamanho da janela.

Ao longo do tempo uma imagem surgirão.

01: Você pode ver que as contas estão a comprar regularmente produtos dentro de segundos de-los ir ao vivo. Sugerindo que eles podem ser bots.

02: Você também pode olhar para a janela de tempo utilizado para as ofertas, se a janela é de 1 hora, em seguida, alguns compradores primeiros serão os seres humanos. Um ser humano raramente será atualizada durante 4 horas embora. Se o tempo decorrido é bastante consistente entre publicar / compra, independentemente da duração da janela, em seguida, que é um bot. Se a publicar / hora de compra é curto para pequenas janelas e fica mais tempo para grandes janelas, que é um eremita!

Agora, em vez de parar bots de usar o seu site que você tem informação suficiente para dizer-lhe que as contas são certamente usado por bots, e que as contas são susceptíveis de ser utilizados por eremitas. O que você faz com essa informação é com você, mas certamente você pode usá-lo para fazer o seu mais justo site para pessoas que têm uma vida.

Eu acho que proíbe as contas bot seria inútil, seria semelhante a telefonar para Hitler e dizendo "Graças para os cargos de seus submarinos!" De alguma forma você precisa usar as informações de uma maneira que os proprietários de conta não vai perceber. Vamos ver se eu posso sonhar qualquer coisa .....

ordens de processo em uma fila:

Quando o cliente coloca uma ordem em que começar imediatamente um email de confirmação dizendo-lhes sua ordem é colocada em uma fila e será notificado quando ele foi processado. I experimentar este tipo de coisa com a ordem / expedição na Amazônia e não me incomoda em tudo, eu não me importo de ficar um email dias depois me dizendo o meu pedido foi despachado enquanto eu começar imediatamente um e-mail dizendo-me que Amazon sabe que eu quero o livro. No seu caso seria um e-mail para

  1. Seu pedido foi colocado e está em uma fila.
  2. Seu pedido foi processado.
  3. O seu pedido foi despachado.

Os usuários pensam que estão em uma fila justo. Processar sua fila a cada 1 hora para que os usuários normais também experimentam uma fila, de modo a não suspeita Arouse. processar apenas as ordens de bot e eremita contas depois de terem sido na fila para o "tempo humano ordenação média + x horas". reduzindo efetivamente bots para os seres humanos.

Eu digo expor as informações de preço usando uma API. Esta é a solução intuitiva, mas ela não funciona para dar-lhe o controle sobre a situação. Adicionar algumas limitações à API para torná-lo um pouco menos funcional do que o website.

Você poderia fazer o mesmo para encomendar. Você pode experimentar com pequenas mudanças para a funcionalidade API / desempenho até obter o efeito desejado.

Existem proxies e botnets para derrotar cheques IP. Há roteiros de leitura captcha que são extremamente bom. Há até mesmo equipes de trabalhadores na Índia, que captchas derrota para um pequeno preço. Qualquer solução que você pode vir até com possa ser razoavelmente derrotado. As soluções da mesmo Ned Batchelder pode ser passou por usando um controle WebBrowser ou outro navegador simulado combinado com uma lista botnet ou proxy.

No momento, estamos usando a última geração de balanceadores de carga BigIP da F5 para fazer isso. O BigIP tem recursos avançados de gerenciamento de tráfego que podem identificar scrapersand bots com base na frequência e padrões de utilização, mesmo de entre um conjunto de fontes por trás de um único IP. Ele pode então acelerador estes, servi-los conteúdo alternativo ou simplesmente marcá-las com cabeçalhos ou cookies para que você possa identificá-los no código do aplicativo.

Como sobre a introdução de um atraso que requer interação humana, como uma espécie de "jogo CAPTCHA". Por exemplo, poderia ser um pouco jogo em Flash, onde durante 30 segundos eles têm de bolas quadriculada estourar e evitar estourar bolas sólidas (evitando questões daltonismo!). O jogo seria dado um número aleatório e que os transmite jogo de volta para o servidor seria as coordenadas e timestamps dos pontos clicados, junto com a semente utilizada.

No servidor você simular a mecânica do jogo usando essa semente para ver se os cliques teria realmente estourar as bolas. Se o fizessem, eles não eram somente humano, mas eles levou 30 segundos para validar a si mesmos. Dê-lhes um ID de sessão.

Você deixa que id de sessão faz o que gosta, mas se faz muitas solicitações, eles não podem continuar sem jogar novamente.

Em primeiro lugar, deixe-me recapitular o que precisamos fazer aqui. Eu percebo que eu só estou parafraseando a pergunta original, mas é importante que tenhamos esta 100% em linha reta, porque há um monte de grandes sugestões que receber 2 ou 3 de 4 direita, mas como vou demonstrar, você vai precisar de um abordagem multifacetada para cobrir todos os requisitos.

Requisito 1: se livrar do 'bater bot':

O rápido-fogo 'batendo' de sua página dianteira está prejudicando o desempenho do seu site e está no cerne do problema. O 'enxotar' vem de ambos os bots IP único e - supostamente - de botnets também. Queremos livrar-se de ambos.

Exigência 2: Não suje com a experiência do usuário:

Nós poderíamos consertar a situação bot bastante eficaz através da implementação de um procedimento de verificação desagradável como telefonar para um operador humano, resolvendo um monte de CAPTCHAs, ou similar, mas isso seria como forçar todos os passageiros do avião inocente para saltar através de segurança loucura aros apenas para a pequena chance de pegar o muito estúpido de terroristas. Oh esperar - nós realmente fazer isso. Mas vamos ver se podemos não fazer isso em woot.com.

Requisito 3: Evitando a 'corrida armamentista':

Como você menciona, você não quer ser pego na corrida armamentista spambots. Então você não pode usar ajustes simples como campos ocultos ou misturadas de forma, questões de matemática, etc., uma vez que eles são medidas essencialmente obscuridade que pode ser trivialmente detectados automaticamente e contornadas.

Requisito 4: frustrando 'alarme' bots:

Esta pode ser a mais difícil das suas necessidades. Mesmo se pudermos fazer um desafio humano-a verificação eficaz, bots ainda pode consultar sua página dianteira e alertar o scripter quando há uma nova oferta. Queremos tornar esses bots inviável bem. Esta é uma versão mais forte do primeiro requisito, uma vez que pode não só não os bots emitir solicitações rápido-fogo que danificam desempenho - eles não podem, ainda, emitir o suficiente repetidas solicitações para enviar um 'alarme' para o scripter a tempo de ganhar a oferta.


Ok, então vamos se se podemos atender todos os quatro requisitos. Primeiro, como eu mencionei, nenhuma medida um vai fazer o truque. Você terá que combinar um par de truques para alcançá-lo, e você vai ter que engolir dois aborrecimentos:

  1. Será necessária uma pequena quantidade de usuários para saltar através de aros
  2. Um pequeno número de usuários não serão capazes de obter as ofertas especiais

Eu percebo estas são irritante, mas se podemos fazer o número 'pequeno' pequeno o suficiente , espero que você vai concordar os pontos positivos superam os negativos.

Primeira medida: otimização baseada em Usuário:

Este é um acéfalo, e eu tenho certeza que você fazê-lo já. Se um usuário está conectado, e mantém refrescante 600 vezes por segundo (ou algo assim), você parar de responder e dizer-lhe para resfriá-lo. Na verdade, você provavelmente estrangular seus pedidos significativamente mais cedo do que isso, mas você começa a idéia. Desta forma, um logado bot será banido / estrangulada assim que começa polling seu site. Esta é a parte fácil. Os bots não autenticados são nosso verdadeiro problema, então para eles:

Segunda medida: Alguma forma de estrangulamento IP, como sugerido por quase todos:

Não importa o quê, você terá que fazer alguns com base IP estrangulamento para impedir a 'bater bot'. Uma vez que parece importante para você para permitir que os visitantes para obter as ofertas especiais, você só tem IPs para ir inicialmente não autenticado (non-logged-in), e embora eles não são perfeitos, eles do trabalho contra bots-IP único. Botnets são um animal diferente, mas eu vou voltar a esses. Por agora, vamos fazer alguma limitação simples para bater rápido-fogo bots single-IP.

O impacto no desempenho é insignificante se você executar a verificação de IP antes de todos os outro processamento, utilizar um servidor proxy para o estrangulamentológica, e armazenar os IPs em uma estrutura de árvore de pesquisa otimizada memcached.

terceira medida: Cloaking o acelerador com respostas em cache:

Com o rápido-fogo bots-IP únicos estrangulada, ainda temos de endereço lentas bots single-IP, ou seja. bots que são especificamente otimizadas para 'voar sob o radar' espaçando os pedidos ligeiramente mais afastados do que os impede de estrangulamento.

Para tornar instantaneamente lento single-IP bots inúteis, basta usar a estratégia sugerida por abelenky: servir páginas em cache 10 minutos de idade para todos os IPs que foram vistos nas últimas 24 horas (ou mais). Dessa forma, cada IP recebe um 'acaso' por dia / hora / semana (dependendo do período que você escolher), e não haverá nenhum aborrecimento visível para os usuários reais que estão apenas bater 'reload', exceto que eles não ganhar a oferta.

A beleza desta medida é que é também frustra 'bots' de alarme, desde que eles não são originários de uma botnet.

(Eu sei que você provavelmente preferiria que os usuários reais foram autorizados a atualizar mais e mais, mas não há nenhuma maneira de dizer um ser humano-spam de atualização a partir de um bot-spam pedido distante sem um CAPTCHA ou similar)

Quarta medida: reCAPTCHA:

Está certo que CAPTCHAs prejudicar a experiência do usuário e deve ser evitado. No entanto, em _one _ situação que pode ser seu melhor amigo: Se você já projetou um sistema muito restritiva para impedir bots, que - por causa de sua restritividade - também pega um número de falsos positivos; em seguida, um CAPTCHA servido como um último recurso irá permitir que os utilizadores reais que pego para passar por seu estrangulamento (evitando assim situações de negação de serviço irritantes).

O ponto doce, é claro, é quando todos os bots pego em sua rede, enquanto pouquíssimos usuários reais ficar incomodado pela CAPTCHA.

Se você, ao servir-se os 10 minutos de idade páginas em cache, também oferecem uma alternativa, opcional , CAPTCHA-verificado 'reciclagem de primeira página', então os seres humanos que realmente querer manter refrescante, ainda pode fazê-lo sem obter a página em cache de idade, mas com o custo de ter que resolver um CAPTCHA para cada atualização. Que é um aborrecimento, mas um opcional apenas para os usuários inveterados, que tendem a ser mais tolerantes porque sei são o sistema de jogo para melhorar suas chances, e que chances melhorados não são gratuitos.

Quinta medida: Decoy porcaria:

Christopher Mahan teve uma idéia que eu gostava, mas eu iria colocar uma rotação diferente sobre ele. Toda vez que você está preparando uma nova oferta, preparar dois outros 'ofertas' bem, que nenhum humano iria pegar, como uma wingnut 12 milímetros por US $ 20. Quando a oferta aparece na primeira página, coloque todos os três 'ofertas' na mesma imagem, com os números correspondentes a cada oferta. Quando o usuário / bot realmente passa a condenar o item, eles vão ter que escolher (um botão de rádio) que oferecem eles querem, e uma vez que a maioria dos bots seria apenas adivinhando, em dois dos três casos, os bots seria inútil de compra junk.

Naturalmente, isto não resolve 'bots' de alarme, e há uma chance (magro) que alguém poderia construir um bot que era capaz de escolher o item correto. No entanto, o risco de acidentalmente comprando lixo deve fazer scripters transformar inteiramente a partir dos bots totalmente automatizadas.

Sexta medida: Botnet Estrangulamento:

[suprimido]

Ok ............ Eu já passei a maior parte da minha noite pensando nisso, tentando abordagens diferentes .... atrasos globais .... tokens baseados em cookies .. em fila servindo ... 'estrangulamento estranho' .... E ele simplesmente não funciona. Isso não acontece. Eu percebi a razão principal por que você não tinha aceitado nenhuma resposta ainda foi que ninguém tinha proposto uma maneira de impedir uma distribuídos / net zumbi / botataque net .... então eu realmente queria quebrá-la. Eu acredito que eu rachado o problema botnet para autenticação em um segmento diferente , então eu tinha grandes esperanças para o seu problema também. Mas a minha abordagem não se traduz a isso. Você só tem IPs para passar, e um grande botnet o suficiente não se revela em qualquer análise baseada em endereços IP.

Então, se você tiver : Meu sexto medida é nada. Nada. Fecho eclair. A menos que o botnet é pequeno e / ou rápido o suficiente para ser pego no acelerador IP de costume, não vejo qualquer medida eficaz contra botnets que não envolve humana explícita -Verificação tais como CAPTHAs. Sinto muito, mas acho que combina o acima de cinco medidas é a sua melhor aposta. E você provavelmente poderia fazer muito bem com o truque de 10 minutos de cache apenas de abelenky sozinho.

Existem algumas outras soluções melhores / já publicado, mas para completar, eu percebi que eu mencionar isto:

Se a sua principal preocupação é a degradação do desempenho, e você está olhando para true martelar , então você está lidando realmente com um ataque DoS, e você provavelmente deve tentar manipulá-lo adequadamente. Uma abordagem comum consiste em simplesmente cair os pacotes de um IP no firewall depois de um número de ligações por segundo / minuto / etc. Por exemplo, o Linux padrão firewall, iptables, tem uma função correspondente operação padrão 'hashlimit', que poderia ser usado para solicitações de conexão correlatas por unidade de tempo para um endereço IP.

Embora, esta questão provavelmente seria mais apto para a próxima SO-derivado mencionado na última SO-podcast, ele ainda não foi lançado, então eu acho que é OK para resposta:)

EDIT:
Como fora apontado por novatrust, ainda existem ISPs realmente não atribuir IPs aos seus clientes, de forma eficaz, um script do cliente de tal ISP iria desativar todos os-clientes daquele ISP.

Escrever um reverse-proxy em um servidor Apache na frente de sua aplicação que implementa uma Tarpit (Wikipedia artigo) para punir bots. Seria simplesmente gerenciar uma lista de endereços IP que conectados nos últimos segundos. Você detectar uma explosão de pedidos de um único endereço IP e depois exponencialmente retardar esses pedidos antes de responder.

É claro, vários seres humanos pode vir do mesmo endereço IP, se eles estão em uma conexão de rede NAT'd mas é improvável que um ser humano se importaria o seu tempo de resposta indo para 2mS a 4ms (ou até 400ms), enquanto um bot será prejudicada pela crescente demora muito rapidamente.

  1. Fornecer um feed RSS para que eles não comer até sua largura de banda.
  2. Ao comprar, Faça todos esperar um aleatória quantidade de tempo de até 45 segundos ou algo assim, dependendo do que você está procurando exatamente. Exatamente quais são as suas restrições de tempo?
  3. Dê a todos um minuto para colocar seu nome na para o desenho e, em seguida, selecionar aleatoriamente pessoas. Penso que esta é a maneira mais justa.
  4. Monitor de contas (incluir algumas vezes na sessão e armazená-lo?) E adicionar atrasos para as contas que parecem como eles estão abaixo do limite de velocidade humana. Que, pelo menos, fazer os bots ser programado para desacelerar e competir com os seres humanos.

Em primeiro lugar, por definição, é impossível apátrida apoio, ou seja verdadeiramente anónimos, transações ao mesmo tempo ser capaz de separar os bots de usuários legítimos.

Se podemos aceitar a premissa de que podemos impor algum custo em um visitante woot-tipo-palmada nova em sua primeira página Hit (s), eu acho que tenho uma solução possível. Por falta de um nome melhor, eu vou chamar vagamente esta solução "Uma visita ao DMV."

Vamos dizer que há uma concessionária de carros que oferece um novo carro diferente a cada dia, e que em alguns dias, você pode comprar um carro esporte exótico por US $ 5 cada (limite 3), além de uma taxa de destino $ 5.

O problema é, o negócio exige que você visitar a concessionária e mostrar uma carteira de motorista válida antes que você está autorizado pela porta para ver que carro está à venda. Além disso, você deve ter dito a carteira de motorista válida, a fim de fazer a compra.

Assim, o visitante pela primeira vez (vamos chamá-lo de Bob) a este negociante de carro é recusada a entrada, e é referido escritório DMV (que está convenientemente localizado ao lado) para obter uma carteira de motorista.

Outros visitantes com uma carteira de motorista válida é permitido em, depois de mostrar sua carteira de motorista. Uma pessoa que faz um incômodo de si mesmo por vadiagem o dia todo, importunando os vendedores, agarrando folhetos e esvaziar o café e bolachas acabará por ser afastado.

Agora, de volta para Bob sem a licença - tudo o que ele tem de fazer é suportar a visita ao DMV uma vez. Depois disso, ele pode visitar a concessionária e comprar carros a qualquer hora que ele gosta, a menos que ele acidentalmente deixou a carteira em casa, ou sua licença é otherwised destruídos ou revogada.

A carteira de motorista neste mundo é quase impossível de falsificar.

A visita ao DMV envolve primeiro obter o formulário de inscrição no "Start Here" fila. Bob tem de levar o requerimento preenchido para a janela # 1, onde o primeiro de muitos servos ranzinza civis terá seu pedido, processá-lo, e se tudo estiver em ordem, carimbar o aplicativo para a janela e enviá-lo para a próxima janela. E assim, Bob vai de janelas para a janela, esperando para cada etapa do seu pedido para passar, até que ele finalmente chega ao final e recebe sua licença de drivere.

Não há nenhum ponto na tentativa de "curto-circuito" o DMV. Se os formulários não são preenchidos corretamente em triplicado, ou quaisquer respostas erradas dadas a qualquer janela, o aplicativo está rasgado, eo cliente infeliz é enviado de volta para o início.

Curiosamente, não importa o quão cheio ou vazio do escritório é, leva-se aproximadamente a mesma quantidade de tempo para se atendido em cada janela sucessiva. Mesmo quando você é a única pessoa na linha, parece que o pessoal gosta de fazer você esperar um minuto atrás da linha amarela antes de proferir, "Next!"

As coisas não são assim tão terrível no DMV, no entanto. Enquanto toda a espera e processamento para obter a licença está acontecendo, você pode assistir a um infomercial muito divertido e informativo para a concessionária de carros enquanto você está no lobby do DMV. Na verdade, as corridas infomerical apenas o suficiente para cobrir a quantidade de tempo que você gasta obter a sua licença.

A explicação um pouco mais técnica:

Como eu disse no topo, torna-se necessário ter alguma statefulness sobre a relação cliente-servidor que permite aos seres humanos separados de bots. Você quer fazê-lo de uma forma que não excessivamente penalizar o anonimato visitante (não autenticada) humana.

Esta abordagem provavelmente requer um processamento do lado do cliente AJAX-y. Um visitante-tipo-palmada novo para woot é dada a "Welcome New User!" página inteira de texto e gráficos que (por estrangulamento do lado do servidor apropriado) leva alguns segundos para carregar completamente. Enquanto isso está acontecendo (e que o visitante é presumivelmente ocupado lendo a página de boas-vindas (s)), seu código identificativo está lentamente a ser montado.

Vamos dizer, por Discussion, o token (aka "carta de condução) consiste em 20 pedaços. A fim de obter cada pedaço sucessiva, o código do lado do cliente deve apresentar um pedido válido para o servidor. O servidor incorpora um atraso deliberado (digamos 200 milissegundos), antes de enviar o próximo pedaço junto com o 'selo' necessário para fazer a solicitação próximo pedaço (ou seja, os selos necessários para ir de uma janela DMV para o próximo). ao todo, cerca de 4 segundos deve transcorrer para terminar o pedaço-desafio- resposta-chunk-desafio-resposta -...- processo chunk-challenge-response-conclusão.

No final deste processo, o visitante tem um símbolo que lhe permite ir para a página de descrição do produto e, por sua vez, ir para a página de compra. O token é uma identificação única para cada visitante, e pode ser usado para estrangular suas actividades.

No lado do servidor, você só aceitam páginas vistas de clientes que têm um token válido. Ou, se é importante que todos podem finalmente ver a página, colocar uma penalidade de tempo sobre os pedidos que está faltando um token válido.

Agora, para que isso seja relatiely benigna para o visitante humana legítima, t tornar o processo de emissão de token acontecer relativamente não-intrusiva em segundo plano. Daí a necessidade da página de boas-vindas com entreter cópia e gráficos que é deliberadamente abrandou ligeiramente.

Esta abordagem forças um acelerador-down de bots que usar um token, ou tomar o tempo de configuração mínima para obter um novo token existente. Claro, isso não ajuda tanto contra ataques sofisticados que usam uma rede distribuída de visitantes do falso.

Você não pode impedir totalmente bots, mesmo com um captcha. No entanto, você pode torná-lo uma dor de escrever e manter um bot e, portanto, reduzir o número. Particularmente, forçando-os para atualizar seus bots diariamente você vai estar causando mais de interesse perder.

Aqui estão algumas idéias para torná-lo mais difícil de bots de escrita:

  • Exigir executar uma função javascript. Javascript torna muito mais de uma dor de escrever um bot. Talvez exigir um captcha se não estiver executando o Javascript para ainda permitir que usuários não-javascript reais (mínima).

  • O tempo as teclas quando digitação no formulário (novamente via javascript). Se não for human-gosto, em seguida, rejeitá-la. É uma dor de dactilografia imitar em um bot.

  • Escreva o seu código para atualizar o seu ID campo é diário com um novo valor aleatório. Isto irá forçá-los a atualizar seu bot diária que é uma dor.

  • Escreva o seu código para reordenar seus campos em uma base diária (obviamente, de alguma forma isso não é aleatória para seus usuários). Se eles estão contando com a ordem de campo, isso vai tropeçar-los e novamente forçar a manutenção diária ao seu código bot.

  • Você pode ir ainda mais longe e usar o conteúdo em Flash. Flash é totalmente uma dor para escrever um bot contra.

Geralmente, se você começar a tomar uma mentalidade de não impedi-los, mas tornando-se mais trabalho para eles, você provavelmente pode atingir o objetivo que você está procurando.

Cole um atraso de 5 minutos sobre todos os anúncios de produtos para usuários não registrados. usuários casuais realmente não vai notar isso e os usuários noncasual será registrado de qualquer forma.

Não estou vendo o grande peso que você reclama de verificar IPs de entrada. Pelo contrário, eu fiz um projeto para um de meus clientes que analisa o acesso HTTP registra a cada cinco minutos (que poderia ter sido em tempo real, mas ele não queria que por algum motivo que eu nunca entendi completamente) e cria regras de firewall para conexões de blocos de todos os endereços IP que geram um número excessivo de pedidos a menos que o endereço pode ser confirmado como pertencente a um motor de busca legítima (google, yahoo, etc.).

Este cliente executa um serviço de hospedagem e é executar esta aplicação em três servidores que lidam com um total de 800-900 domínios. pico de atividade está na faixa de mil hits por segundo e nunca houve um problema de desempenho -. firewalls são muito eficientes em descartar pacotes a partir de endereços na lista negra

E, sim, a tecnologia DDOS definitivamente não existir o que iria contra este esquema, mas ele não está vendo que acontecer no mundo real. Pelo contrário, ele diz que é muito reduzido a carga em seus servidores.

A minha abordagem seria a de se concentrar em soluções não tecnológicas (caso contrário, você está entrando em uma corrida armamentista você vai perder, ou pelo menos passar uma grande quantidade de tempo e dinheiro em). Eu se concentrar nas partes de faturamento / embarque - você pode encontrar bots tanto por encontrar várias entregas para o mesmo endereço ou por múltiplas acusações a um método de pagamento único. Você mesmo pode fazer isso através de itens ao longo de várias semanas, por isso, se um usuário tem um item anterior (respondendo realmente muito rápido), ele pode ser atribuído algum tipo de "deficiência" desta vez.

Isto também teria um efeito colateral (benéfico, eu acho, mas eu poderia estar errado de marketing-wise para o seu caso) de talvez alargar o círculo de pessoas que recebem sorte e conseguir a compra woot.

A maioria das soluções puramente técnicas já foram oferecidas. Vou, portanto, sugerir uma outra visão do problema.

Pelo que entendi, os bots são criados por pessoas realmente tentando comprar os sacos que você está vendendo. O problema é -

  1. Outras pessoas, que não operam bots, merecem uma chance de comprar, e você está oferecendo uma quantidade limitada de sacos.
  2. Você quer atrair os humanos para seu site e apenas vender os sacos.

Em vez de tentar evitar os bots, você pode ativar potenciais saco-compradores para se inscrever em um e-mail, ou atualização mesmo SMS, para ser notificado quando uma venda terá lugar. Você pode até mesmo dar-lhes um minuto ou dois vantagem (a URL especial onde os vender começa, gerados aleatoriamente, e enviado com o e-mail / SMS).

Quando esses compradores vai comprar eles estão em você estiver site, você pode mostrar-lhes o que quiser em banners laterais ou qualquer outra coisa. Aqueles que executam os bots vão preferir se inscrever basta para o seu serviço de notificação.

Os bots corredores ainda pode executar bots em sua notificação para concluir a compra mais rápida. Algumas soluções para que possa ser oferecendo um one-click buy.

A propósito, você mencionou seus usuários não são registrados, mas parece que aqueles que compram esses sacos não são compradores aleatórios, mas as pessoas que olham para a frente a estas vendas. Como tal, eles poderiam estar dispostos a registrar para obter uma vantagem em tentar "ganhar" um saco.

Em essência o que estou sugerindo é tentar e olhar para o problema como um social, em vez de um técnico.

Asaf

user agents Time-bloco que fazem assim muitos pedidos por minuto. Por exemplo, se você tem alguém solicitando uma página exatamente a cada 5 segundos por 10 minutos, eles provavelmente não é um usuário ... Mas pode ser difícil de obter este direito.

Se eles disparar um alerta, redirecionar todos os pedidos para uma página estática com tão pouco DB-IO possível com uma mensagem de deixá-los saber que vai ser permitido voltar em X minutos.

É importante acrescentar que você provavelmente só deve aplicar esta sobre os pedidos de páginas e ignorar todos os pedidos de mídia (JS, imagens, etc).

Prevenção DoS derrotaria # 2 da @ do davebug objetivos que ele delineou acima, "Mantenha o local a uma velocidade não diminuiu por bots", mas não seria necessário resolver # 1, "vender o item para os seres humanos não-scripting"

Eu tenho certeza que um scripter poderia escrever algo para andar de skate apenas abaixo do limite excessivo que ainda seria mais rápido do que um ser humano poderia ir através dos formulários de pedidos.

Tudo bem assim que os spammers estão fora concorrentes pessoas comuns para ganhar o "pântano de porcaria" leilão? Por que não fazer o próximo leilão ser um "saco de porcaria" literal? Os spammers começa a pagar um bom dinheiro para um saco cheio de doggy faz, e todos nós rir deles.

O importante aqui é para mudar o sistema para carregar remover do seu servidor, evitar bots de ganhar o saco de lixo, sem deixar o botlords sabe que você está jogos-los ou eles vão rever sua estratégia. Eu não acho que há alguma maneira de fazer isso sem algum processamento no seu fim.

Assim você gravar visitas em sua home page. Sempre que alguém bate na página que conexão é comparado com o seu último hit, e se ele foi muito rápido, então ele é enviado uma versão da página sem a oferta. Isso pode ser feito por algum tipo de mecanismo de balanceamento de carga que envia bots (os hits que são demasiado rápido) para um servidor que simplesmente serve versões de sua casa página em cache; pessoas reais são enviados para o bom servidor. Isso leva a carga fora do servidor principal e faz com que os bots acho que eles ainda estão sendo servido as páginas corretamente.

Ainda melhor se a oferta pode ser diminuído de alguma forma. Em seguida, você ainda pode fazer as ofertas no servidor falso, mas quando os preenchimentos bot fora a palavra forma "Desculpe, você não estava rápido o suficiente" :) Em seguida, eles serão definitivamente acho que eles ainda estão no jogo.

Como você sabe, existem scripters fazer encomendas?

O cerne do problema é que você não pode separar os scripts dos usuários legítimos e, portanto, não pode bloqueá-los, então como é que você sabe que há scripters em tudo?

Se você tem uma maneira de responder a esta pergunta, então você tem um conjunto de características que você pode usar para filtrar os scripters.

Vamos vez o problema em sua cabeça - você bots comprando coisas que você quer que as pessoas reais para comprar, que tal fazer uma chance real de que os bots vai comprar coisas que você não deseja que o pessoas reais para comprar.

Tenha um acaso para alguns não exibidos html que os bots raspagem vão pensar que é a situação real, mas pessoas reais não vai ver (e não se esqueça que as pessoas reais inclui os cegos, por isso considero leitores de tela etc, bem ), e este viaja através de comprar algo exorbitante caro (ou não faz a compra real, mas fica detalhes de pagamento para você colocar em uma banlist).

Mesmo que os bots mudar para 'alerta o usuário' e não 'fazer a compra', se você pode obter falsos alarmes suficientes, você pode ser capaz de torná-lo suficientemente inútil para as pessoas (talvez não todos, mas alguns redução a enganação é melhor do que nenhum) não se incomodar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top