Использование файла .htaccess для противодействия веб-скрэпингу
Веб-скрэпинг, известный так же, как заимствование контента, выскабливание данных, выскабливание сети или извлечение веб-данных, это способ извлечения данных с веб-сайтов, как правило, с помощью программы, которая отсылает определенное количество HTTP-запросов, имитируя поведение человека, получает ответы и извлекает из них необходимые данные.
Современные веб-скребки с графическим интерфейсом, такие, например, как Kimono, позволяют выполнить эту задачу, не располагая навыками программирования.
Если вы столкнулись с проблемой выскабливания контента с одного из ваших сайтов, существует много способов обнаружения веб-скреперов — Google Webmaster Tools или Feedburner, например.
В этой статье мы рассмотрим несколько способов максимально осложнить жизнь для скреперов, используя файлы .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:
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-адрес, вы также можете перенаправлять их на другую страницу:
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» , подготовленной дружной командой проекта Интернет-технологии.ру
Блокирование доступа в .htaccess по IP
Warning: Invalid argument supplied for foreach() in /home/write365/sapid.info/www/wp-content/themes/SIIDMA/single.php on line 34
17 августа, 2019 | All
Блокирование доступа по IP в .htaccess
Блокирование 1 шт IP-адреса
<Limit GET POST> order allow, deny deny from 195.168.1.1 allow from all </Limit>
Блокирование большого количества IP-адресов
Блокируем конкретные адреса:
<Limit GET POST> order allow,deny deny from 195.168.1.1 deny from 195.168.1.2 deny from 195.168.1.3 allow from all </Limit>
Блокируем подсеть по IP — просто пишем первую часть адреса:
<Limit GET POST> order allow,deny deny from 195.168.1.1 deny from 195.168.3. deny from 195.168.1.3 allow from all </Limit>
Разрешаем доступ только с определенных адресов
#Запрещаем доступ для всех, кроме указанных IP-адресов ErrorDocument 403 http://www.domain.com Order deny,allow Deny from all Allow from 124.34.48.165 Allow from 102.54.68.123
.htaccess — переадресация с несуществующих страниц сайта
Добавляем такую строчку в файл .htaccess
ErrorDocument 404 http://domain.com/
Запрет загрузки файла с другого сайта
site.com — ваш домен, stop.gif — изображение, которое будет показано вместо не загруженного:
Options +FollowSymlinks #Запрещаем загрузку файлов с внешних сайтов RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com/ [nc] RewriteRule .*.(gif|jpg|png)$ http://domain.com/stop.gif[nc]
.htaccess — пример файла для WordPress
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # Включаем кэш в браузерах посетителей нужно уточнить у хостера установлены ли модули mod_headers и mod_expires в сборке Apache <ifModule mod_headers.c> # Все html и htm файлы будут храниться в кэше браузера один день <FilesMatch "\.(html|htm)$"> Header set Cache-Control "max-age=43200" </FilesMatch> # Все css, javascript и текстовые файлы будут храниться в кэше браузера одну неделю <FilesMatch "\.(js|css|txt)$"> Header set Cache-Control "max-age=604800" </FilesMatch> # Все флэш файлы и изображения будут храниться в кэше браузера один месяц <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$"> Header set Cache-Control "max-age=2592000" </FilesMatch> # Отключаем кеширование php и других служебных файлов <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> </IfModule> <ifModule mod_expires.c> ExpiresActive On #по умолчанию кеш в 5 секунд ExpiresDefault "access plus 5 seconds" # Включаем кэширование изображений и флэш на месяц ExpiresByType image/x-icon "access plus 1 month" ExpiresByType image/jpeg "access plus 4 weeks" ExpiresByType image/png "access plus 30 days" ExpiresByType image/gif "access plus 43829 minutes" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" # Включаем кэширование css, javascript и текстовых файлоф на одну неделю ExpiresByType text/css "access plus 604800 seconds" ExpiresByType text/javascript "access plus 604800 seconds" ExpiresByType application/javascript "access plus 604800 seconds" ExpiresByType application/x-javascript "access plus 604800 seconds" # Включаем кэширование html и htm файлов на один день ExpiresByType text/html "access plus 43200 seconds" # Включаем кэширование xml файлов на десять минут ExpiresByType application/xhtml+xml "access plus 600 seconds" </ifModule> # END WordPress
Также полезное инфо
blogerator.org/page/fajl-primery-htaccess-redirekt-dostup
Поделиться постом Предыдущий пост Следующий постКак в WordPress блокировать по IP доступ в админ-панель?
Как известно, WordPress является самым популярным “движком” для быстрого создания сайтов. В этой популярности есть один существенный минус – повышенное внимание хакеров. Вследствие этого каждый владелец WordPress-сайта должен постоянно следить за безопасностью своего ресурса и быть всегда в курсе всех методов его защиты.
Что такое блокировка по IP?
Одним из таких методов является ограничение доступа по IP в админ-панель сайта.
Как Вы знаете, любая точка доступа в Интернете (компьютер, смартфон, роутер и т.д.) имеет свой IP-адрес, видный всем остальным. Это означает, что если Вы сумели зайти в Интернет, то значит Вам был присвоен этот самый IP-адрес. Если Вы зашли на какой-либо сайт, то сделали это под каким-то IP, который может быть определен и сохранен.
Статический или динамический IP-адрес?
IP-адрес состоит из 4-х чисел, разделенных между собой точкой. Например, 12.250.98.250. Участник Сети может иметь как свой персональный (уникальный или статический) IP-адрес, так и разделять еще с кем-то (непостоянный или динамический). Важно знать, какой у Вас адрес: статический или динамический. Чтобы это определить, необходимо воспользоваться бесплатным онлайн-сервисом, который точно укажет Вам эти 4 числа (например, 2ip.ru). Если после нескольких проверок Вам выдается один и тот же адрес, значит он статический.
Блокируем доступ в админ-панель
Наша зада – настроить сайт так, чтобы к его администраторской панели мог получить доступ пользователь с конкретным IP-адресом, что повысит сложность получения полного контроля над сайтом сторонними людьми. Для этого мы будем использовать .htaccess – специальный файл, управляющий поведением веб-сервера, который находится в корневом каталоге Вашего сайта. О том, как получить доступ к файлам сайта и как редактировать этот файл, было описано в одном из наших прошлых материалов.
Для статического IP-адреса
Если у Вас имеется статический IP-адрес, то, чтобы только Вы смогли получить доступ к админ-панели сайта, в самое начало .htaccess необходимо добавить следующие строки:
order deny,allow allow from 12.250.98.250 deny from all
Во второй строке, вместо присутствующих там чисел, нужно заменить на числа Вашего IP-адреса. Если необходимо добавить несколько адресов, то вторую строчку можно продублировать (указав другой адрес) и разместить под ней.
Для динамического IP-адреса
В зависимости от того, какие числа в вашем IP-адресе постоянно изменяются, запись в .htaccess примет следующий вид:
order deny,allow allow from 12.250. deny from all
Как видно, мы указали только первые два числа. Это означает, что они являются неизменными, а меняются лишь последние два.
Универсальный метод
Также стоит рассмотреть еще один вариант блокировки по IP – бесплатный плагин WP-Ban. Дополнение является более универсальным решением, позволяя администратору сайта без каких-либо правок файла .htaccess заблокировать конкретный IP-адрес (статический или динамический) или целый диапазон, наглядно показывая статистику заблокированных адресов.
Итак, после установки и активации плагина, в админ-панели необходимо перейти в раздел Настройки -> Ban.
Страница настроек плагина разделена на несколько блоков, отвечающих за ту или иную возможность для блокировки IP. Рассмотрим каждую из них.
Блок Banned IPs позволит заблокировать посетителя сайта по его IP-адресу. Согласно примеру, возможен ввод как статического адреса, так и динамического.
В разделе Banned IP Range можно указать целый диапазон адресов, которые будут блокироваться.
В блоке Banned Host Names можно заблокировать по имени хоста.
Banned Referers отвечает за блокировку по адресу сайта, с которого перешли.
Banned User Agents – блокировка по клиентскому приложению User Agent.
В разделе Banned Exclude IPs возможно заблокировать всех, исключая введенных.
В блоке Banned Message указывается сообщение, которое увидит заблокированный посетитель при попытке войти на сайт.
Раздел Ban Stats выведет на экран число попыток входа на сайт каждого заблокированного IP-адреса.
Чтобы настройки вступили в силу, необходимо нажать кнопку Save Changes.
Если Вам понравилась статья — поделитесь с друзьями
Блокировка файлов и папок через .htaccess по IP-адресу
Как вы уже наверное догадываетесь, первое что я хочу заблочить, это папка wp-admin в WordPress.
Поэтому кидаем в неё файл .htaccess, кстати через Windows его создать не удастся, используйте какой-нибудь блокнот, например Notepad++.
Теперь насчёт содержимого файла. Первый, самый простой вариант:
order deny, allow deny from all
Доступ к админке будет закрыт абсолютно для всех. Пока .htaccess будет цел и невредим, попасть туда просто невозможно.
Но ведь тогда, каждый раз, перед тем, как зайти в админку, придется править файл через FTP — не очень удобно, верно? Поэтому в следующем примере разрешим доступ вашему IP-адресу:
order deny, allow deny from all allow from 174.204.33.33
Для тех, у кого динамический IP:
order deny, allow deny from all allow from 174.204.33. allow from 175.205. allow from 177.177.177.
Также вы можете просто заблокировать какие-то конкретные, «недоброжелательные» айпишники или диапазоны.
order allow, deny deny from 173.175.11.12 deny from 173.32.1. allow from all
Если вдруг так получится, что на вашем хостинге нифига не работает и в админку по-прежнему каждый может спокойно попасть, попробуйте вот такой видоизмененный код:
<limit GET> satisfy any order deny, allow deny from all allow from 174.204.33. allow from 175.205. allow from 177.177.177. require valid-user </limit>
И под конец скроем все файлы .htaccess от посторонних глаз. Обратите внимание, что этот код нужно закинуть в .htaccess, находящийся в корневой директории сайта.
<Files .htaccess> order deny, allow deny from all </Files>
Миша
В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.
Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.
Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.