O que em uma página HTML é exclusivo?
-
18-09-2019 - |
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.
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 é importanteContent-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.)