Использование файла .htaccess для противодействия веб-скрэпингу

Веб-скрэпинг, известный так же, как заимствование контента, выскабливание данных, выскабливание сети или извлечение веб-данных, это способ извлечения данных с веб-сайтов, как правило, с помощью программы, которая отсылает определенное количество HTTP-запросов, имитируя поведение человека, получает ответы и извлекает из них необходимые данные.

Современные веб-скребки с графическим интерфейсом, такие, например, как Kimono, позволяют выполнить эту задачу, не располагая навыками программирования.

Если вы столкнулись с проблемой выскабливания контента с одного из ваших сайтов, существует много способов обнаружения веб-скреперов - Google Webmaster Tools или Feedburner, например.

В этой статье мы рассмотрим несколько способов максимально осложнить жизнь для скреперов, используя файлы .htaccess.

Файл .htaccess (доступ к гипертексту) является простым текстовым файлом конфигурации для веб-серверов, который переназначает глобальные параметры сервера для директории, в которой он расположен. Эти файлы можно использовать с применением инновационных подходов для предотвращения веб-скрэпинга.

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

Однако, что нам делать, если кто-то оказался достаточно умным, чтобы обойти все ваши фильтры? У меня есть решение и для этого случая.

Приступаем к работе с .htaccess

Поскольку использование файлов .htaccess подразумевает проверку сервером Apache и чтение всех файлов .htaccess при каждом запросе, как правило, по умолчанию эта функция отключена.

Существуют различные процессы для включения ее в Ubuntu, OS X и Windows. Ваши файлы .htaccess будут интерпретированы Apache только после их включения, иначе они будут просто игнорироваться.

Далее, мы будем использовать RewriteEngine Apache, который является частью модуля mod_rewrite. Если вам это необходимо, вы можете ознакомиться с подробным руководством по настройке mod_rewrite для Apache или с общим руководством по .htaccess.

Выполнив все подготовительные этапы, вы будете готовы приступить к разработке решений по препятствованию веб-скрэперам. Если вы не сделаете хотя бы что-либо одно из выше перечисленного, Apache просто будет игнорировать ваши файлы .htaccess или будет выдавать ошибку при перезапуске после внесения изменений.

Предотвращение хотлинкинга

Если кто-то выскабливает ваш контент, весь ваш встроенный HTML-код остается тем же самым. Это означает, что ссылки на изображения, которые были частью вашего контента (и, скорее всего, размещены на вашем домене), остаются неизменными на чужом сайте.

Если скрепер желает разместить извлеченный у вас контент на другом сайте, то изображения будут по-прежнему ссылаться на первоисточник. Это называется хотлинкинг. Хотлинкинг увеличивает нагрузку на сервер, потому что каждый раз, когда кто-то открывает сайт-скрепер, изображения загружаются с вашего сайта.

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

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
 
# domains that can link to your content (images here)
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mysite.com [NC]
 
# show no image when hotlinked
RewriteRule \.(jpg|png|gif)$ – [NC,F,L]
 
# Or show an alternate image
# RewriteRule \.(jpg|png|gif)$ http://mysite.com/forbidden_image.jpg [NC,R,L]

Несколько замечаний по приведенному выше коду:

  • Включение RewriteEngine дает нам возможность перенаправлять запросы пользователя;
  • RewriteCond определяет, какие запросы должны быть перенаправлены. % {HTTP_REFERER} является переменной, которая содержит домен, с которого был сделан запрос;
  • Затем мы сопоставляем его с нашим собственным доменом mysite.com. Мы добавляем (WWW .), чтобы обеспечить охват запросов и с mysite.com, и с www.mysite.com. Аналогично, наш код охватывает HTTP и HTTPS;
  • Затем мы проверяем, запрашивались ли файлы JPG, PNG или GIF, и либо выводим ошибку, либо перенаправляем запрос на альтернативное изображение;
  • NC - игнорирует запрос, F выводит ошибку 403 Forbidden, R перенаправляет запрос, L блокирует перезапись;
  • Помните, что вы должны применять только одно из вышеуказанных правил (либо ошибку 403, либо замену изображения).

Потому что, встретив L, Apache не будет применять другие правила. В приведенном выше примере кода, метод замены изображения вынесен в комментарии.

Как веб-скреперы могут обойти это

Один из способов, с помощью которых веб-скребки могут обойти этот барьер, это загружать изображения, которые они встречают, как HTML-код. В этом случае можно применить проверку регулярных выражений. Когда изображения загружаются, ссылки на них изменяются во время сохранения данных в системе.

Разрешение или блокировка запросов с определенных IP-адресов

Если вам удалось определить происхождение запросов веб-скреперов (обычно, это можно сделать, обнаружив неестественно большое количество запросов с одного IP-адреса), вы можете блокировать запросы с этого IP:

Order Deny
Deny from xxx.xxx.xxx.xxx

В приведенном выше примере (и в других примерах из этой статьи) xxx.xxx.xxx.xxx - это код, который вам нужно заменить IP-адресом, который вы хотите заблокировать. Если вы действительно помешаны на безопасности, вы можете отклонять запросы со всех IP-адресов и выборочно разрешать доступ только с IP-адресов из белого списка:

order deny,allow
Deny from all
# IP Address whitelist 
allow from xx.xxx.xx.xx
allow from xx.xxx.xx.xx

Одним из примеров применения этой техники (не связанным с веб-скрэпингом) является блокировка доступа к папке WordPress wp-admin. В этом случае вы разрешаете запросы только с вашего IP-адреса, что исключает возможность взлома вашего сайта через wp-admin.

Как веб-скрэперы могут обойти это

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

Например: Допустим, кто-то выскабливает ваш сайт с IP-адреса 1.1.1.1. Таким образом, вы через .htaccess блокируете 1.1.1.1. После чего, если скребок имеет доступ к прокси-серверу 2.2.2.2, он перенаправляет свой запрос по маршруту через 2.2.2.2. В этом случае вашему серверу кажется, что запрос идет с IP-адреса 2.2.2.2. И, несмотря на блокирование 1.1.1.1, скребок все еще имеет доступ к вашему ресурсу.

Таким образом, если скрепер имеет доступ к тысячам прокси-серверов, он может стать практически не обнаружимым. Если он посылает запросы в небольших количествах с каждого прокси-сервера.

Перенаправление запросов с конкретных IP-адресов

Вы можете не только блокировать любой IP-адрес, вы также можете перенаправлять их на другую страницу:

RewriteCond %{REMOTE_ADDR} xxx\.xxx\.xxx\.
RewriteRule .* http://mysite.com [R,L]

Если вы перенаправляете запросы на статический сайт, скорее всего, скребок сможет это понять. Но вы можете пойти еще дальше и предпринять кое-что инновационное. Для этого вам необходимо понять, как ваш контент заимствуется.
Веб-сребок является систематической процедурой.

Она включает в себя исследование шаблонов URL-адресов и отправку запросов ко всем возможным страницам веб-сайта. Если вы, например, являетесь пользователем WordPress, ваша система использует шаблон URL-адресов http://mysite.com/?p=[page_no], где page_no представляет собой число от 1 до того количества страниц, которое есть на вашем сайте.

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

RewriteCond %{REMOTE_ADDR} xxx\.xxx\.xxx\.
RewriteRule .* http://mysite.com/redirection_page [R,L]

В приведенном выше коде, "redirection_page" может быть страницей, используемой для выполнения одного из последующих предопределенных редиректов. Таким образом, когда будет запущена программа веб-скрепера, она будет перенаправляться на различные страницы, и ей будет трудно обнаружить, что вы вычислили скребок.

С другой стороны, "redirection_page" может перенаправить запрос на третью страницу "redirection_page_1", которая затем перенаправляет его обратно на "redirection_page". Это приведет к возникновению петли переадресации, и запрос зависнет между двумя страницами на неопределенный срок.

Как могут веб-скрэперы обойти это

Веб-скребок может проверить перенаправление запроса. Если имел место редирект, то он получит код статуса HTTP 301 или 302. Если редиректа не было, то код статуса будет обычным 200.

Помощь от Мэтта Каттса

Мэтт Каттс является главой команды Google по борьбе со спамом. Часть его работы заключается в постоянном мониторинге скрэпинговых сайтов. Если ему не понравится ваш сайт, он может сделать так, что тот исчезнет из результатов поиска Google.

Недавние обновления поисковых алгоритмов Google Panda и Penguin повлияли на видимость огромного количества сайтов, в том числе ряда скрэпинговых.

Веб-мастер может сообщить Google о скрэпинговых сайтах с помощью этой формы. Для этого он также должен предоставить и оригинальный источник контента.

Если вы размещаете уникальный контент, то, несомненно, рано или поздно должны будете попасть в поле зрения веб-скреперов. Тем не менее, если они будут публиковать вслед за вами ваш контент, Google позаботится о том, чтобы он был исключен из результатов поиска.

Перевод статьи «Using .htaccess to Prevent Web Scraping» был подготовлен дружной командой проекта Сайтостроение от А до Я.

24 июля 2014 в 12:47
Вам понравился сайт или конкретно эта страница? Поделитесь ею со своими друзьями, нажав на одну из кнопок соцсетей слева или снизу. Желаете быть в курсе последних обновлений сайта — подпишитесь удобным для вас образом:
или поддержите нас, нажав на кнопку "Мне нравится"!
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок