Pergunta

Minha pergunta é sobre verificação mais do que qualquer outra coisa. O que pode ser usado para determinar o que é exclusivo em um documento HTML? (O documento pode ter um grau de dinâmico.)

O que pode ser usado ou gerado para reconhecer que uma página é a página correta com precisão de 99%, levando em consideração que você pode armazenar uma "impressão digital" da página que você está verificando?


Para maior clareza, isso é um extra adicional para criptografia/https etc. Esta página pode e mudará com conteúdo dinâmico de acordo com usuários específicos, mas também a impressão digital, mas uma única impressão digital não pode ser 100% correspondente a 100% dos usuários devido à natureza de conteúdo dinâmico. Portanto, um hash não pode funcionar aqui, pelo menos não de uma forma simplista.

Foi útil?

Solução

É fácil calcular uma impressão digital exclusiva de uma página HTML. Construa um hash a partir do seguinte:

  • Protocolo: HTTP ou HTTPS
  • URL: domínio + URI
  • Query_string
  • o conteúdo da página exata até um byte

Opcionalmente alguns cabeçalhos:

  • Server
  • Content-Type Isso é importante
  • Content-encoding Provavelmente isso também
  • Mais ideias? Sinta -se à vontade para editá -los.

Isso pressupõe que você não esteja postando nenhum dado nas páginas.

Outras dicas

Você não pode ter 1% de certeza se não verificar o IP do host. O próximo é a criptografia. (Sem isso, você pode ser vítima de poisagem ARP (apenas em redes LAN)).

A chave no HTTPS deve ser a mesma o tempo todo.

Se mudar, significa que alguém está trapaceando ou a chave foi atualizada (as chaves têm a data de validade.)

A impressão digital da página é o nome do host, a porta e o caminho. Essa é a única coisa garantida para ser única em toda a web. Suponho que você também possa incluir os cabeçalhos de cache (de última hora) para verificar se ele mudou.

Além disso, se você formar o HTML, poderá ver se ele mudou mesmo que o cabeçalho de última hora mudasse.

Supondo por um minuto que você deseja armazenar uma 'impressão digital' de uma página HTML para que você possa reconhecê -la mais tarde se for exatamente Matches, basta usar um resumo simples de hash da página HTML.

A menos que você esclareça mais a pergunta, não vejo razão para que seja importante que seja HTML ou em que navegador está.

No entanto, isso não lhe dirá se a página está no mesmo local. Para isso, você precisaria armazenar detalhes adicionais, como host/ip e caminho.

Se você conseguir obter as versões de texto das duas páginas, poderá diferenciá -las. Você pode determinar um intervalo máximo aceitável para diferenças na página.

Existe um UNIX util (chamado Diff). Existem versões Win32 dessa ferramenta flutuando também na rede. A Wikipedia tem um artigo sobre diff: http://en.wikipedia.org/wiki/diff.

O artigo wiki lista as ferramentas de comparação de arquivos gratuitas e a seção "Veja também" possui links para outros artigos que discutem ferramentas de comparação de arquivos e codificação Delta.

A "métrica de distância de Levenshtein" também pode ser uma abordagem interessante.

Há um mecanismo de diferença de diferença C# decente no CodeProject. Não posso postar outro link devido aos meus pontos baixos, mas o título do artigo é: "Um algoritmo Diff genérico e reutilizável em C#".

Mesmo se você tivesse o nome exato do host, a porta e o caminho, o conteúdo ainda pode ser diferente se houver um servidor de aplicativos que serve as páginas da Web ou se o servidor da Web estiver inserindo o conteúdo do anúncio.

Se você pudesse identificar com segurança as partes do HTML que são dinâmicas (como anúncios ou registros de data e hora que continuam atualizando), eu normalizaria os dados primeiro. Eu retiraria todos os personagens espaciais (espaços, guias, novas linhas) e depois fazia um hash desse conteúdo.

Eu poderia não Inclua o host Name-port-Path no hash, porque isso não adicionaria nada à "impressão digital". (Essas informações são úteis mais tarde, quando você precisa solicitar o servidor da web posteriormente para comparar o HTML.)

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