Что в HTML-странице уникально? - PullRequest
1 голос
/ 04 февраля 2010

Мой вопрос касается проверки больше всего на свете. Что можно использовать для определения того, что уникально в документе HTML? (Документ может иметь степень динамичности.)

Что можно использовать или сгенерировать, чтобы распознать, что страница является правильной страницей с точностью, скажем, 99%, учитывая, что вы можете хранить «отпечатки пальцев» своего рода проверяемой страницы?


Для ясности, это дополнительное дополнение к шифрованию / https и т. Д. Эта страница может и будет изменяться с динамическим содержимым в зависимости от конкретных пользователей, однако, так же как и отпечаток пальца, но один отпечаток не может на 100% соответствовать 100% пользователей из-за к природе динамического контента. Следовательно, хэш здесь не может работать, по крайней мере, в упрощенном виде.

Ответы [ 6 ]

2 голосов
/ 04 февраля 2010

Уникальный отпечаток HTML-страницы легко рассчитать. Создайте хеш из следующего:

  • URL: домен + URI
  • Строка запроса
  • точное содержимое страницы до байта

При желании некоторые заголовки:

  • Server
  • Content-Type это важно
  • Content-encoding это наверное тоже
  • больше идей? Не стесняйтесь редактировать их в.

это предполагает, что вы не размещаете данные на страницах.

1 голос
/ 07 февраля 2010

Даже если у вас есть точное имя хоста, порт и путь, контент может отличаться, если сервер приложений обслуживает веб-страницы или веб-сервер вставляет рекламный контент.

Если бы вы могли надежно определить части HTML, которые являются динамическими (например, объявления или временные метки, которые постоянно обновляются), то я сначала нормализовал бы данные. Я бы убрал все пробелы (пробелы, символы табуляции, новые строки), а затем создал бы хэш этого содержимого.

Я бы не включил бы имя-порта-хоста в хеш, потому что это ничего не добавило бы к "отпечатку". (Эта информация полезна позже, когда вам потребуется запросить веб-сервер позже для сравнения HTML.)

1 голос
/ 05 февраля 2010

Если вы можете получить текстовые версии двух страниц, вы можете их различать. Вы можете определить максимальный диапазон, приемлемый для различий на странице.

Существует утилита Unix (называемая diff). Есть также Win32 версии этого инструмента, плавающие в сети. В Википедии есть статья на diff: http://en.wikipedia.org/wiki/Diff.

В вики-статье перечислены бесплатные инструменты сравнения файлов, а в разделе «См. Также» есть ссылки на другие статьи, в которых рассматриваются инструменты сравнения файлов и дельта-кодирование.

«Метрика расстояния Левенштейна» также может быть интересным подходом.

В CodeProject имеется приличный механизм различия C #. Я не могу опубликовать другую ссылку из-за моих низких баллов, но заголовок статьи: «Универсальный алгоритм многократного использования различий в C #».

1 голос
/ 04 февраля 2010

Предполагая, что в течение минуты вы хотите сохранить «отпечаток» HTML-страницы, чтобы вы могли распознать его позже, если точно соответствует, просто используйте простой хэш-дайджест HTML-страницы. *

Если вы не проясните вопрос больше, я не вижу причин, почему должно иметь значение, что это HTML или какой браузер в нем.

Это не скажет вам, если страница находится в том же месте, однако. Для этого вам нужно будет хранить дополнительные данные, такие как host / ip и path.

1 голос
/ 04 февраля 2010

Отпечаток страницы - это имя хоста, порт и путь. Это единственное, что гарантированно будет уникальным в Интернете. Я полагаю, вы также можете включить заголовки кэша (Last-Modified), чтобы увидеть, изменился ли он.

Кроме того, если вы хэшируете html, вы можете увидеть, изменился ли он, даже если изменился последний измененный заголовок.

1 голос
/ 04 февраля 2010

Вы не можете быть уверены даже на 1%, если не будете проверять IP хоста. Следующим является шифрование. (Без этого вы можете стать жертвой ARP poisoing (только в локальных сетях)).

Ключ в HTTPS должен быть всегда одинаковым.

Если он изменяется, это означает, что кто-то изменяет или ключ получил обновление (срок действия ключей истекает.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...