Веб-скрэпинг, відомий так само, як запозичення контенту, вишкрібання даних, вишкрібання мережі або витяг веб-даних, це спосіб витягання даних з веб-сайтів, як правило, за допомогою програми, яка відсилає певну кількість 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» був підготовлений дружною командою проекту Сайтостроение від А до Я.