répteis reconhecimento de recurso Anti

répteis reconhecimento de recurso Anti

Podemos répteis processo de rastreamento é dividido em uma solicitação de rede, e adquire os dados de texto extração de parte 3.

Informações sobre o tipo de verificação réptil foi visto na solicitação de rede anti-fase, Anti ideia réptil nesta fase, a fim de evitar que o principal objetivo de rejeitar os indexadores de solicitação quanto possível.

aparece renderização e texto dinâmicos no texto ficar confuso e estágio de extração de dados, ideia anti-réptil, nesta fase, os dados protetora como o principal objetivo, tanto quanto possível os rastreadores evitar o acesso a dados importantes.

características anti reconhecimento recurso rastreador por meio das características do cliente, ou atributos comportamentais usuário distinguir meios de usuários normais e rastreador

Este capítulo descreve as características que queremos identificar o anti-rastreador é o objetivo principal de prevenção, dirigido na fonte dos répteis apareceram.

Em seguida, aprendemos juntos princípio do reconhecimento recurso e répteis para ignorar o anti-tips


reconhecimento WebDriver

Antes de nós aprendemos que os indexadores podem usar ferramentas de renderização para obter dados a partir de páginas web dinâmicas.

"Com" é realmente dirigido pelo navegador correspondente (ou seja WebDriver) emitiu uma directiva para o comportamento do browser.

Em outras palavras, os desenvolvedores podem conduzir as características para distinguir entre o usuário normal e rastreador baseado em navegador do cliente está incluído

Como os desenvolvedores para detectar se o navegador do cliente inclui dirigi-lo?

Estas ferramentas têm características que a tornam? Nesta seção vamos explorar o navegador baseada no conhecimento

local

  1. Abra a página Web
  2. Localize e clique no botão
  3. Extractos do conteúdo do artigo página
  4. conteúdo do artigo Imprimir
from selenium.webdriver import Chrome
import time

browser = Chrome()
browser.get('http://www.porters.vip/features/webdriver.html')
# 定位按钮并点击
browser.find_element_by_css_selector('.btn.btn-primary.btn-lg').click()
# 定位到文章内容元素
elements = browser.find_element_by_css_selector('#content')
time.sleep(1)
# 打印文章内容
print(elements.text)
browser.close()

resultado

请不要使用自动化测试工具访问网页

Depois que o código está sendo executado para obter resultados diferentes com a página de resultados exibida, desta vez eles encontraram que tipo de anti-réptil-lo?

Como o uso de selênio conjunto de dados de destino não pode ser obtido, então tentamos usar Puppeteer, o código correspondente é a seguinte

import asyncio
from pyppeteer import launch

async def main():
 browser = await launch()
 page = await browser.newPage()
 await page.goto('http://www.porters.vip/features/webdriver.html')
 # 定位按钮元素并点击
 await page.click('.btn.btn-primary.btn-lg')
 # 等待 1 秒
 await asyncio.sleep(1)
 # 网页截图保存
 await page.screenshot({'path': 'webdriver.png'})
 await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Os resultados também mostram por favor, não use ferramentas de teste automatizado para páginas web de acesso

Os resultados ilustram o uso Puppeteer não pode obter dados de destino.

Siga as instruções dadas página web, nós sabemos que estes ferramenta web dois pedidos usado é determinado como "ferramentas de teste automatizado."

Para obter dados objetivos, é necessário encontrar a página determinar se o cliente é baseado em "testes automatizados ferramentas", e em seguida, considerando soluções



princípio do reconhecimento Motorista Web

Observar atentamente a página de código, notamos um botão no conjunto de códigos HTML onmousemove evento

O evento ligado o método JavaScript chamado verificar Webdriver

function verify_webdriver(){
 var webr = navigator.webdriver;
 elements = document.getElementById('content');
 if (webr){
     elements.innerHTML = "请不要使用自动化测试工具访问网页";
 }else{
     elements.innerHTML = "\

Este método usa o objeto Navigator original (ou seja, janelas. Navigator objeto) Propriedade Webdriver para determinar se o navegador do cliente por unidade WebDriver.

Se ele detectar webariver propriedade do cliente, ele irá mostrar "Por favor, não use ferramentas de teste automatizado para acessar a página" no rótulo do conteúdo do artigo, ou exibir o conteúdo correto do artigo.
Como a unidade selênio navegador através WebDriver, existe a propriedade Webdriver cliente, não é possível obter dados objetivos.

Na introdução ao Puppeteer documento, Puppeteer controle Chrome ou Chromium Devtools navegador de acordo com o acordo, embora nenhuma menção de se WebDriver, mas o fato de que há Puppeteer propriedade Webdriver

Webdriver Navigator objeto, sua lista de propriedades introduziram

Desenvolvedores aproveitou Navigator objetos julgamento completo sobre se o cliente está usando WebDriver.

Nós normalmente ver quando o acesso on-line para artigos semelhantes para "teste Selenium" ou "Chrome detectada" e outras palavras, refere-se ao reconhecimento Webdriver .



WebDriver método de identificação de bypass

Note-se que, navegador. Webdriver aplica-se apenas ao uso da ferramenta de renderização r Web Drive, o que contribui para respingo

renderização WebKit com a ferramenta de desenvolvimento do kernel é inválido. Podemos obter dados objetivos, Splash pé respingo

Isto segue

function main(splash, args)
	assert (splash: go(args ur1))
    assert( splash: wait(0.5))
    --定位按钮
	local bton= splash: select('btn. btn-primary btn-lg')
	assert(splash: wait(1))
    --鼠标悬停
	bton:mouse_hover()
	--点击按钮
    bton:mouse_click()
	assert(splash:wait(1))
    return {
        -- 返回页面截图
        png = splash:png(),
    }

caixa de exibição é o conteúdo modal do artigo. Isso mostra que, enquanto nós usamos ferramentas de renderização fazer propriedade não mais cansado, você pode obter
dados objetivos

WebDriver resultado de detecção há três, elas são verdadeiras, falsas e indefinido.

Quando usamos ferramentas de renderização Webdriver propriedade, navegador. Valor de retorno Webdriver é verdade

Caso contrário, ele irá retornar ou fa1se undefine

Compreender os princípios identificados após valores Webdriver e retorno, seremos capazes de chegar a uma maneira de lidar com eles. Desde a identificação WebDriver navegador dependente, valor webariver retorno, em seguida, que estão em frente do gatilho verify_webdriver () método para valor navigator.wearier alterado para falso ou indefinido.

suite de selênio e Puppeteer fornecer uma maneira de executar código JavaScript, então vamos tentar usar JavaScript para modificar navegador. valor Webdriver de

Selénio Python kit de código correspondendo

from selenium.webdriver import Chrome
import time

browser = Chrome()
browser.get('http://www.porters.vip/features/webdriver.html')
# 编写修改 navigator.webdriver 的值为 JavaScript 代码
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
# 运行 JavaScript 代码
browser.execute_script(script)
time.sleep(1)
# 定位按钮并点击
browser.find_element_by_css_selector('.btn.btn-primary.btn-lg').click()
# 定位到文章内容元素
elements = browser.find_element_by_css_selector('#content')
time.sleep(1)
# 打印文章内容
print(elements.text)
browser.close()

Desta vez, a página de resultados serão impressos

Este Javascript instruções navegador modificado, o valor do atributo Webdriver é viável

Note-se que esta modificação do valor do atributo método é válido somente na página atual quando o navegador abre uma nova aba ou novas necessidades de janela para
re-executar o navegador de mudanças. Código Javascript que o valor Webdriver

Além disso, há uma maneira de contornar o navegador detecção mitmproxy Webdriver (veja HTPS:. ∥
Mitmproxy.org/) é um proxy HTTPS interativo open source, o cliente pode usar a API fornece um arquivo JavaScript para filtrar código de detecção de navegador. valor do atributo Webdriver

mitmproxy neste processo como um servidor intermediário e o browser, e em resposta a cada pedido passa por mitmproxy

É por causa do intermediário papel mitmproxy, de modo que o conjunto de regras de filtragem, quer reabrir a janela de guia ou nova
não vai redefinir o valor da propriedade de navigator.webdriver



recurso do navegador

Determinar a identidade condições características do cliente não só WebDirver, incluindo o sistema operacional do cliente e informações de hardware e outras informações

Promotores destes valores de características que o utilizador a distinguir entre a condição normal e o rastreador

Além disso serAgent Navigator objeto, cookieEnable, plataforma, atributos plug-ins, objeto da tela (isto é, a janela. Objetos Screen) algumas das propriedades pode ser determinado como a base.

Por exemplo, o valor de cabeçalho UserAgent solicitação do navegador, em comparação com o navegador. Valor do atributo UserAgent

Encadernação navegador. Cliente Platform pode determinar se a entrega aleatória User-Agent

Podemos verificar essa idéia através de um exemplo prático

<script>
    console.log("userAgent:" + navigator.userAgent);
	console.log("platform:" + navigator.platform);
</script>

Em seguida, abra o arquivo HTML em um navegador, ferramentas de desenvolvimento e, em seguida, despertar o interruptor para o painel de Console. Neste ponto, você pode ver

userAgent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.36 Safari/537.36
platform:Win32

No valor de cabeçalho solicitações do navegador UserAgent no navegador. Useragent valores de propriedade são os mesmos, se o valor para o cliente será tratado como diferentes répteis.

sistema operacional gent pelo usuário é exibido como Win32, se os valores de propriedade navigator.platfom este não corresponder, então o cliente pode também ser visto como répteis.


WebDriver exemplo anti-réptil

Nós usamos as imagens de marionetas, Puppeteer permite definir a largura da janela do navegador e altura

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('http://www.porters.vip/features/browser.html')
    await page.setViewport({'width': 1000, 'height': 1000})
    await page.screenshot({'path': 'browser.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Depois de correr começa a foto

Nós caracterizamos valores de atributos para comparar três tipos de ferramentas de renderização para acessar a URL da página de amostra obtida com exceção

Propriedades primeira User-Agent, e Splash Puppeteer tem uma identificação clara, os valores de atributo User-Agent como características do cliente.

Depois observe a resolução da tela, a resolução da ferramenta de três tipos de resolução diferente, a tela pode ser caracterizada como um cliente.

O número de núcleos, uma vez que Ali nuvem ECS é um núcleo, ele aparece como um respingo nuclear. Normalmente, o número de computadores pessoais do núcleo é mais do que dois, a menos que o computador cliente executado em uma máquina virtual, ou a idade de idade. Assim, núcleos de CPU também pode ser caracterizada como um cliente

O número de plug-ins diferentes ferramentas de renderização não é o mesmo, embora o número de plug-ins associados com ferramentas de renderização não são grandes (esta
sujeito ao impacto de plug-in de instalação), mas o valor dessa propriedade pode ser caracterizada como um cliente.

Na verdade, enquanto é possível atribuir diferentes resultados aparecem, você pode caracterizar como um cliente, então a área de valor da propriedade também está incluído

valor do atributo como uma das bases caracterizados por um único servidor não significa que o valor do atributo pode ser confirmado a identidade do cliente, os determina servidor que só a identidade do cliente

Note-se que os valores desses atributos podem ser alterados pelo JavaScript, por isso os resultados obtidos desta forma o reconhecimento de recursos não é confiável



sistema de limite de frequência de acesso combate real

Freqüência refere-se ao número de acesso por unidade de tempo do pedido rede do cliente para o servidor, que é uma descrição de como muitas vezes a quantidade de solicitação de rede

A frequência de usuário normal visitar os crawlers não será tão alta como, os desenvolvedores podem acessar a alta frequência de cliente considerado rastreador

site de exemplo limite de frequência de acesso

Tarefa: 10 páginas visita de pouso consecutivos, exigindo o código de status de resposta é 200.

Esta tarefa parece muito simples, podemos iniciar uma solicitação de pedidos directamente Biblioteca

import requests

for i in range(10):
    res = requests.get('http://www.porters.vip/features/rate.html')
    print(res.status_code)

resultado

200
200
200
200
200
200
503
503
503
503

Se mais time.sleep (1) são capazes de garantir que cada pedido 200

Na verdade, répteis sempre querem taxas de avaliação do pedido em cada vez melhor, de modo que possa completar a tarefa rastejando no menor tempo possível

O uso do método apenas time.sleep (1) esta redução da frequência do pedido não é os melhores engenheiros escolha de rastos

De acordo com frequência acesso rosto restrições de endereço IP para alcançar o anti-réptil, podemos usar várias máquinas comuns de rastreamento

Se a quantidade total de dados é 50000, o limite de velocidade do local alvo 1r / s, utilizando time.sleep (1) que rastejam tarefas realizadas deste modo leva tempo de cerca de 13,9 horas.

Nesta altura, a máquina de rastejamento de unidades de 1 a 10 unidades (10 IP), em seguida, o tempo será reduzida a um rastejantes 1,39 horas.

Esta utilização de várias máquinas rastejantes método comum é chamado rastreamento multi-máquina, se estas máquinas estão localizados em diferentes regiões, e que utilizam a mesma combinação de fila URL é distribuído rastreador.

Distribuído por pares distribuídos arrastando para e distribuído a partir do mestre

Depois de usar um rastreador distribuído, você pode iniciar mais pedidos por unidade de tempo.

Esta abordagem pode responder de forma eficaz para limitar a frequência de acesso, mas altos custos econômicos

Além de aumentar a máquina, mas também pode melhorar o uso de IP frequência de comutação de acesso.

Se uma máquina como um proxy, e por sua vez usar o proxy IP IP local inicia um pedido, é possível aumentar a frequência dobrou visita, o agente pode ser acessado 9 9 vezes o aumento de frequência

Quer melhorar freqüência de acesso em uma máquina, você pode usar múltiplos do proxy IP.

IP do proxy realmente manter um pool de IP, IP são extraídos a partir de um IP piscina cada momento em que o pedido rastreador como um proxy

Note-se que o endereço IP das necessidades piscina IP para fornecer serviços de agência pela máquina real (normalmente um servidor), que irá
fornecer serviço de proxy endereços máquina P coletados, reunidos em um "pool", assim chamada piscina IP .

Você pode configurar o seu próprio servidor proxy para IP, IP também podem ser adquiridos diretamente do fornecimento de negócios Serviços de agências



Princípio de limite de frequência de acesso

Os desenvolvedores acreditam que a alta freqüência de visita é répteis.

Para limitar a frequência de pedidos rastreador, o primeiro é para localizar e determinar a identidade do cliente, e o número de identificação de vezes de acordo com o pedido dos registos do cliente e rejeita o número excessivo pedido unidade de tempo de pedidos de clientes.

Mencionar a identidade do cliente, nós pensamos que a primeira resposta é o endereço IP.

Can Nginx implementado de acordo com a função endereço IP limite de frequência o acesso do rastreador



Navegador conhecimento extensões de impressões digitais

Além do endereço IP é usado para determinar a identidade do cliente, bem como a identidade da sessão iniciada credenciais do usuário (como cookies ou Token) e
as impressões digitais do navegador

Bolinho e Token tipicamente gerado pela infra-estrutura, a identificação tarefa é restringida pela extremidade traseira do programa também está completada.

programa de backend mantém um número de pedidos em um ID de usuário e uma unidade de fila de tempo.

Cada vez que o cliente inicia o pedido, a solicitação será realizada pela extremidade traseira do programa ou informação de prova do biscoito com a identidade do utilizador fila comparação identificação.

Se a solicitação de usuário não foi vezes na fila não atingiu o valor limite, em resposta ao pedido para a identificação ou a unidade de tempo, e o número de pedidos na fila correspondentes a acumular, ao passo que a extremidade traseira da lógica pedido de acesso é rejeitada limite de frequência

Alguma frequência incidental framework web madura de restrição de acesso apresenta, como Django quadro descanso, que oferece módulos de limite de velocidade de estrangulamento.

Este módulo permite limite de frequência de acesso para o usuário logado e assinado

Entre limite nova visita frequência da unidade de tempo por segundo, por minuto, por hora, por dia. Para o uso como um método de Cookies ou Token é baseado na frequência de restrições de acesso, só precisamos de aplicar um número suficiente de contas, Cookie planta ou valor simbólico obter cada login da conta get, você pode construir o mesmo pool IP construído como um tanque de credenciais do usuário.

valor do cookie ou remover um valor das credenciais piscina token para cada solicitação, e usa o código de valor na falsificação de identidade do usuário.

Também conhecido como uma impressão digital impressão digital cliente do navegador, refere-se a um resultado de cadeia a partir de uma variedade de cliente informações características dos mesmos.

Composição de impressões digitais de informação característica inclui informações de hardware navegador (como valores de resolução de tela e cor, o tipo de núcleos de CPU e similares), informações do navegador Platform como mencionado anteriormente, os valores de atributo User-Agent, etc.) plug-in lista e e não repita informações (como endereço IP, conectado no cookie do usuário, etc.).

Em que a informação não-duplicado pode realmente ser alterado artificialmente.

Repita resultado de cadeia probabilidade de essas informações combinadas em relativamente baixa, mas se for um cibercafé ou a escola de aquisição uniforme de computadores, equipamentos diferente é susceptível de obter a mesma informação de impressões digitais, porque eles têm a mesma configuração de hardware, mas também na mesma um segmento de rede, que irá aumentar a probabilidade de repetição

Tendo em conta este problema, foi sugerido que o uso UUID foi, tecnologia de impressão digital "única" Canvas e WebGL.

UUID é uma abreviatura de um identificador exclusivo universal (Universally Unique Identifier), que é uma normas de construção de software, também está aberto
para colocar parte da Fundação Software na área de ambientes de computação distribuída.

UUID especificações são dadas para o RFC4122, a especificação UUID sugeriu componentes e algoritmo de geração.

UUID consiste das seguintes seções.

  • 60 do carimbo de tempo atual.
  • clocking
  • IEEE número de identificação da máquina globalmente único, se o cartão de rede, o endereço MAC é obtida a partir do cartão, o cartão não é de outro modo obtido
    finalmente produzido UUD

Desenvolvedores podem ser escritos em UUID Cookie, valor do cookie ao pedido pela validação do lado do servidor.

Mas se o cliente fecha Cookie, em seguida, a impressão digital torna-se ineficaz.

Canvas é HTML5 novos componentes, os desenvolvedores podem usar JavaScript desenho padrão e o efeito dinâmico na página.

Canvas pode ser feito por desenhar imagens Base64 codificação, ter uma longa seqüência de indústria, tais String Um chamados impressões digitais lona.

Canvas não dependem biscoito, biscoito fechado mesmo se o cliente não afeta o lado do servidor recebe a impressão digital Canvas gerado.

<Lona ID = "test-canvas" width = "500 height =" 200" >



Diferentes navegadores geralmente usam mecanismo de processamento de imagem diferente, as opções de imagem de exportação, o nível de compressão de imagem, mesmo com o mesmo código de processamento, o resultado será diferente.

Do ponto de vista do sistema operacional, o sistema tem uma fonte diferente não pode ser diferente, as diferenças de renderização de fontes também afetam tela de desenho resultados.

Devido a estas características de lona, ​​os desenvolvedores acreditam que para a imagem traçada por valor lona não se repita.

Para usar a tela para gerar uma impressão digital, é preciso completar o desenho, dados de imagem lidos e tarefas de compressão de dados



exemplo de URL

página de exibição de impressões digitais navegador lona usada para exibir o valor MD5 Canvas desenhar imagens e dados dos dados

Lona única impressão digital, WebGL Navigato impressões digitais r e atributos de objecto não pode ser usado como uma identidade do cliente, mas essas impressões digitais, em conjunto com uma combinação de valores de atributo, é possível reduzir a probabilidade de impressões digitais utilizadas.

Fingerprint.js (veja hps :. / Fingerprints com / zh )
é uma biblioteca de detecção de impressões digitais fonte aberta, o qual foi recolhido por JavaScript a partir das informações do navegador, e extrair os dados disponíveis e os dados criptografados em um código de identificação único.

Fingerprint.js usando o método mais avançado de identificação, incluindo impressões digitais de lona rastreamento, amostras de áudio, WebGL
identificação de impressões digitais, inspeção e detecção plugue navegador da fonte, etc.



ligações répteis anti escondidos

Anti ligações répteis oculto na página refere-se a um meio de detectar o link escondido para os indexadores.

links ocultos não aparecem na página, os usuários não podem acessar, mas é possível crawlers rastrear os links para ser colocado em uma fila e inicia uma solicitação para o link.

Os desenvolvedores podem usar esse recurso para distinguir entre usuários normais e crawlers

Por exemplo, links rastreador encontrado lá / detail / e / details /, link, em seguida os desenvolvedores irão / detalhes intercaladas

E definir o estilo para exibir: nenhum

O efeito é a tags esconder estilo CSS, então a gente só vê seis páginas mercadoria, mas crawlers foi extraído URL 8 peças de mercadoria.

De acordo com dois deste fenômeno, podemos supor com segurança a lógica do site anti-réptil:

Enquanto o acesso do cliente URL / detalhes / Interface no cliente considerado répteis, e rejeita o pedido do IP


Este capítulo conclui

Se crawlers ou as ferramentas que usamos, pode haver algumas características, os desenvolvedores podem ser diferenciados de acordo com essas características
de usuário normal e répteis.

Note-se que estas características não são imutáveis.

Répteis réptil engenheiros meios podem adivinhar o anti-alvo site está usando o fenômeno, de acordo com alguns, e depois fazer um acordo com

Acho que você gosta

Origin www.cnblogs.com/kai-/p/12588431.html
Recomendado
Clasificación