É possível proteger o scraping do json api usando tokens aleatórios?

5

Eu construí uma json api tranquila para uma loja online usando o Laravel.

Agora, desejo criar um aplicativo AngularJS para executar o aplicativo Web front-end. Os preços dos produtos para minha loja precisam ser atualizados a cada segundo, então Angular precisa obter o json do produto do servidor uma vez por segundo para atualizar o html.

Eu gostaria de fazer alguma coisa para proteger esses dados json publicamente acessíveis de serem roubados por scrapers / bots repetidamente atingindo minha API para roubar meus dados de produtos e preços.

Meus pensamentos:

Cada resposta da json api contém um token de uso único aleatório (estou ciente de fazer coisas para parar colisões).

Este token aleatório é injetado via AngularJS em um campo oculto na página html. O Angularjs lê o token oculto antes de solicitar novamente a API e usa isso no cabeçalho da próxima solicitação get.

Uma resposta json é fornecida apenas com o token correto no cabeçalho. Depois que o token é usado, ele expira e qualquer tentativa de reutilizar o token expirado faz com que o endereço IP seja bloqueado por um período ou seja sinalizado para o administrador investigar.

Existe uma maneira melhor de fazer o que precede? Existe algum tipo de solução disponível para o meu problema? Considerando que estou pagando pelo feed de precificação do produto, eu realmente não quero que algum babaca consiga isso de mim de graça só porque expus uma API!

Embora eu entenda que provavelmente não há como ter 99% de certeza de que alguém poderia encontrar uma maneira de raspar meu json, deve haver algo relativamente simples que eu possa fazer para proteger meu json feed de bots / scrapers idiotas simplesmente usando o curl roubar dados.

    
por Gravy 16.12.2013 / 13:44
fonte

1 resposta

3

A resposta curta é: não há uma maneira adequada de proteger totalmente os dados publicamente acessíveis da cópia.

A cópia barata sem perda é uma das principais vantagens dos dados digitais. Qualquer pessoa que possa acessar seus dados pode copiá-lo. E não é fácil se livrar dessa habilidade.

O truque com o nonce sugerido por você torna o scraping um pouco mais complexo, mas não impossível, e até mesmo não muito mais difícil. Um bot pode avaliar qualquer coisa que possa ser avaliada por um navegador da web. E, na verdade, bots modernos geralmente fazem isso. Eles podem executar um navegador da web sem cabeçalho (como o PhantomJS) e "ver" páginas exatamente como o usuário vê. Os bots mais avançados emulam cliques de mouse e randomizam atrasos entre as ações, por isso é muito difícil distingui-los dos humanos.

E se os seus dados são realmente públicos (não há autenticação), então não há uma maneira strong de protegê-los de bots, embora você possa tornar sua vida um pouco mais difícil. é sempre um confronto entre o proprietário de uma loja e o de um bot. O proprietário da loja tenta tornar o bot mais complexo e caro, dificultando a extração de dados. O desenvolvedor do bot tenta tornar o bot mais sofisticado. Ele continua até que o bot ou os mecanismos de proteção se tornem muito caros para os negócios de alguém.

Você pode usar vários truques como ofuscação de dados, captcha, nonce, algumas heurísticas para detectar a atividade humana. Ele filtrará a maioria dos spiders de massa que não foram desenvolvidos especialmente para o seu site. Se alguém é direcionado para sua loja e desenvolve um raspador especialmente para ele, é provável que você não possa protegê-lo.

Por isso, acho que você deve ir ao lado da luz e minimizar os custos, tornando sua JSON API o mais simples e direta possível.

    
por 19.12.2013 / 23:10
fonte

Tags