Способ обнаружения веб-соскабливания

Мне нужно обнаружить выскабливание информации на моем сайте. Я пробовал обнаружение на основе моделей поведения, и он кажется многообещающим, хотя относительно тяжелым вычислением.

База предназначена для сбора временных меток запроса определенной клиентской стороны и сравнения их поведения с общим шаблоном или предварительно вычисленным шаблоном.

Чтобы быть более точным, я собираю временные интервалы между запросами в массив, индексированные по функции времени:

i = (integer) ln(interval + 1) / ln(N + 1) * N + 1
Y[i]++
X[i]++ for current client

где N - предел времени (счет), интервалы, большие N, отбрасываются. Изначально X и Y заполняются единицами.

Затем, после того, как я получил достаточное количество из них в X и Y, пришло время принять решение. Критерии - это параметр C:

C = sqrt(summ((X[i]/norm(X) - Y[i]/norm(Y))^2)/k)

где X - определенные клиентские данные, Y - общие данные, а norm() - функция калибровки, k - коэффициент нормировки, в зависимости от типа нормы(). Существует 3 типа:

  • norm(X) = summ(X)/count(X), k = 2
  • norm(X) = sqrt(summ(X[i]^2), k = 2
  • norm(X) = max(X[i]), k is square root of number of non-empty elements X

C находится в диапазоне (0..1), 0 означает, что отклонения в поведении отсутствуют, а 1 - максимальное отклонение.

Калибровка типа 1 лучше всего подходит для повторения запросов, тип 2 для повторения запроса с небольшими интервалами, тип 3 для интервалов неопределенного запроса.

Как вы думаете? Я буду признателен, если вы попробуете это в своих сервисах.

Ответ 1

Честно говоря, ваш подход совершенно бесполезен, потому что его тривиальный обход. Злоумышленнику даже не нужно писать строку кода, чтобы обойти ее. Прокси-серверы бесплатно, и вы можете загрузить новую машину с новым IP-адресом на amazon ec2 за 2 цента в час.

Лучший подход - Roboo, который использует методы cookie для создания роботов. Подавляющее большинство роботов не могут запускать javascript или flash, и это может быть использовано в ваших интересах.

Однако все это "(в) безопасность, хотя неизвестность", и ТОЛЬКО ПРИЧИНА, почему она может работать, потому что ваши данные не являются Это стоит того, чтобы программист потратил на это 5 минут. (Включая Roboo)

Ответ 2

Я делаю много веб-скрепок и всегда использую несколько IP-адресов и случайных интервалов между каждым запросом.

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

Ответ 3

Если вы задаете вопрос о правильности вашего алгоритма, это не так плохо, но кажется, что вы слишком усложняете его. Вы должны использовать базовые методологии, уже используемые WAF для установления предельных соединений. Один из таких алгоритмов, который уже существует, - это алгоритм Leaky Bucket (http://en.wikipedia.org/wiki/Leaky_bucket).

Что касается ограничения скорости, чтобы остановить очистку веб-страниц, есть два недостатка в попытке оценить предельные соединения. Во-первых, люди могут использовать прокси-сети или TOR для анонимизации каждого запроса. Это, по сути, сводит на нет ваши усилия. Даже с помощью программного обеспечения для очистки скрестов, такого как http://www.mozenda.com, используйте огромный блок IP-адресов и вращайте их для решения этой проблемы. Другая проблема заключается в том, что вы можете заблокировать людей, использующих общий IP-адрес. Компании и университеты часто используют NAT, и ваш алгоритм может принимать их как один человек.

Для полного раскрытия я являюсь соучредителем Distil Networks, и мы часто выкалываем дыры в WAF, как ограничение скорости. Мы заявляем, что требуется более комплексное решение и, следовательно, потребность в нашем сервисе.

Ответ 4

Хорошо, кто-то может создать робота, который будет заходить на ваш сайт, загружать html (не изображения, css и т.д., Как в ответе @hoju) и строить график ссылок, которые будут перемещаться на вашем сайте.

Робот может использовать случайные тайминги для выполнения каждого запроса и изменения IP-адреса в каждом из них, используя прокси, VPN, Tor и т.д.

Мне хотелось ответить, что вы можете попытаться обмануть робота, добавив скрытые ссылки с помощью CSS (распространенное решение, найденное в Интернете). Но это не решение. Когда робот получает доступ к запрещенной ссылке, вы можете запретить доступ к этому IP. Но вы получите огромный список запрещенных IP-адресов. Кроме того, если кто-то начнет подделывать IP-адреса и делать запросы к этой ссылке на вашем сервере, вы можете оказаться в изоляции от мира. Помимо всего прочего, возможно, что будет реализовано решение, позволяющее роботу видеть скрытые ссылки.

Я думаю, что более эффективным способом было бы проверять IP-адрес каждого входящего запроса с помощью API, который определяет прокси, VPN, Tor и т.д. Я искал в Google "api Detection vpn Proxy Tor" и нашел некоторые (платные) сервисы., Может быть, есть бесплатные.

Если ответ API положительный, перешлите запрос на код проверки.