Любой пользователь может открывать, читать и копировать статьи ваших сайтов, если, конечно, ваш ресурс работает не по форме подписки. Такая ситуация не представляет собой проблемы, только если статьи не копируются в “промышленных масштабах” и не используются на других сайтах для увеличения количества страниц в индексе Яндекса или Google.
Ваш авторский контент может быть скопирован и размещен где угодно, со злым умыслом или без него. Из-за этого падает уникальность контента, и ухудшается отношение к сайту поисковых систем, но есть и еще одна сторона.Популярные сайты и блоги размещают на своих страницах рекламные статьи и пресс-релизы, которые также могут быть скопированы недоброжелателями. В теории, копия статьи о бренде может быть даже полезна, так как привлечет больше людей. Однако, если статья со ссылкой уникальна и оптимизирована под запрос, копия значительно снизит ее ценность. Представьте, вы написали заказанную статью со ссылкой, разместили в блоге, а уже через пару часов она оказывается на другом сайте, но, конечно, уже без ссылки. Поисковые системы еще не проиндексировали текст и не могут определить первоисточник, а недовольные рекламодатели уже пишут что ваша статья не уникальна и обвиняют в воровстве контента. С такой ситуацией столкнулся один из вебмастеров Ротапост.
Сначала мы посоветовали разместить в статье информацию об авторстве, добавить текст в “Оригинальные тексты” в Вебмастере Яндекса, добавить после текста каждой статьи ссылку на источник, чтобы текст после парсинга (т.е. автоматического выкачивания вашего контента) содержал упоминание вашего сайта. Но это не убережет статью от копирования, а вас от недовольства рекламодателей.
Чтобы доказать свое авторство и первенство публикации рекламодателям, можно показать им дату появления материала в кеше поисковых систем. Однако, есть вероятность, что статья долгое время не будет проиндексирована или сначала проиндексируется на сайте-воре. В случае этого блогера, все обошлось. Конфликт с рекламодателями удалось урегулировать, когда он показал дату и время в кеше Google. Время различалось буквально на несколько минут, но это убедило рекламодателя, что вебмастер Ротапост разместил уникальный текст.
Тем не менее проблема с выкачиванием текстов не была решена. Да, рекламодатели видят, что текст, который они заказывали, был опубликован раньше. Но кто из оптимизаторов будет готов платить блогу, с которого регулярно копируются тексты? Мы стали искать способы надежнее защитить контент наших вебмастеров и теперь готовы поделиться ими с вами.
Ранее мы уже размещали статью о защите от копирования. Сегодня рассмотрим как максимизировать защиту вашего блога, используя новые методы и модификации уже известных. Некоторые способы могут показаться неподходящими для вашего сайта. Просто выберите те, что подходят именно вам.
ЗАЩИТА ОТ РУЧНОГО КОПИРОВАНИЯ
Простой запрет
Для начала рассмотрим уже известный нам, самый распространенный метод – защита с применением JavaScript:
<script type=»text/javascript»>
document.ondragstart = noselect;
// запрет на перетаскивание
document.onselectstart = noselect;
// запрет на выделение элементов страницы
document.oncontextmenu = noselect;
// запрет на выведение контекстного меню
function noselect() {return false;}
</script>
У скрипта есть ряд недостатков. Во-первых, некоторые из современных браузеров частично игнорируют этот код. Например, во многих версиях Mozilla Firefox вы сможете выделить текст. При этом, правая кнопка мыши все еще отключена, но посетитель может скопировать текст с помощью комбинации Ctrl+C или пункта в главном меню браузера, предназначенного для этого. Во-вторых, при отключенных JavaScript любые манипуляции с текстом становятся вновь доступны.
Чтобы немного осложнить жизнь злоумышленникам, мы запретим им использовать некоторые комбинации клавиш. Модифицируем имеющийся код, опять же, используя JavaScript:
<script type=»text/javascript»>
document.ondragstart = noselect;
// запрет на перетаскивание
document.onselectstart = noselect;
// запрет на выделение элементов страницы
document.oncontextmenu = noselect;
// запрет на выведение контекстного меню
function noselect() {return false;}
document.oncontextmenu;
function catchControlKeys(event){
var code=event.keyCode ? event.keyCode : event.which ? event.which : null;
if (event.ctrlKey){
// Ctrl+U
if (code == 117) return false;
if (code == 85) return false;
// Ctrl+C
if (code == 99) return false;
if (code == 67) return false;
// Ctrl+A
if (code == 97) return false;
if (code == 65) return false;
}
}
</script>
Если вы используете WordPress, этот код нужно поместить в файл header.php перед закрывающим тегом </head>. А тегу <body> добавить атрибут onkeypress=»return catchControlKeys(event)».
К скрипту мы добавили отключение комбинаций клавиш Ctrl+C, Ctrl+A (выделить все) и Ctrl+U (просмотр исходного кода страницы). Как бы там ни было, отключение JavaScript снимет все ограничения. Текст все-еще можно скопировать с помощью меню браузера.
Запрет в CSS
Дополнительно можно запретить выделять контент при помощи CSS-стилей. Для этого нужно указать для слоя, на котором размещается контент:
-moz-user-select: -moz-none;
-o-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;
Это запретит выделять текст в популярных браузерах. Можно обойти отключением стилей.
Подмена текста
Способ хорошо подходит блогам на CMS WordPress. После попытки копирования в буфер обмена попадает не оригинальный текст, а другой, который вы укажете, например, “Эта статья скопирована с сайта example.com”. Это достигается несложной доработкой кода, известного нам по первой статье.
Скрипт записывает в буфер обмена вместо текста статьи только ее название и ссылка на оригинал:
function add_replaced_text() {
if (is_single()) { ?>
<script type=’text/javascript’>
function addLink() {
if (
window.getSelection().containsNode(
document.getElementsByClassName(‘post’)[0], true)) {
var body_element = document.getElementsByTagName(‘body’)[0];
var selection;
selection = window.getSelection();
var pagelink = » <?php the_title(); ?>. <a href='<?php echo get_permalink(get_the_ID()); ?>’>Читайте статью на blog.rotapost.ru</a>»; //Change this if you like
var new_text = pagelink;
var new_div = document.createElement(‘div’);
new_div.style.left=’-99999px';
new_div.style.position=’absolute';
body_element.appendChild(new_div );
new_div.innerHTML = new_text ;
selection.selectAllChildren(new_div );
window.setTimeout(function() {
body_element.removeChild(new_div );
},0);
}
}
document.oncopy = addLink;
</script>
<?php
}
}
add_action( ‘wp_head’, ‘add_replaced_text’);
Код необходимо добавить в файл functions.php.
В переменной pagelink хранится текст, который будет копироваться в буфер обмена, ее содержимое можно свободно изменять на свое усмотрение.
Пользователь, перешедший на страницу со статьей и решивший ее скопировать, столкнется с защитой, поставленной нами ранее (на выделение текста, нажатие клавиш и т.п.). Он будет вынужден отключить JavaScript и CSS. Но даже после того как он это сделает, скрипт все-равно заменит выделенный текст на указанный вами, независимо от того, был ли текст скопировал комбинацией Ctrl+C или через меню браузера.
ЗАЩИТА ОТ АВТОМАТИЗИРОВАННОГО КОПИРОВАНИЯ
Автоматизированное и автоматическое копирование, называемое “парсинг”, создает гораздо больше неприятностей, чем ручное. Парсеры (программы для сбора информации) посещают сотни и тысячи страниц, выкачивая контент. Парсер способен за считанные минуты скопировать все статьи с небольшого сайта или блога.
Существует огромное количество подобных программ, адаптированных для получения контента из разных источников. Это могут быть как десктопные приложения, работающие на компьютере злоумышленника, так и модули для интернет-сайтов, которые автоматически копируют статьи и выкладывают их на ресурсе, где эти модули установлены.
Парсер просто открывает исходный код страницы, игнорируя клиентские скрипты JavaScript, стили и другие способы защиты, находит в разметке интересующий его блок (например, слой где располагается текст поста) и копирует его содержимое, отметая все лишнее.
Бороться с парсингом бывает очень сложно. Очень часто парсеры маскируются под браузеры, изменяя User-Agent и другие параметры, чтобы их нельзя было отличить от обычного посетителя.
Отключаем RSS-каналы
RSS-ленты помогают быстро оповещать пользователей (подписчиков лент) и различные агрегаторы информации о том, что в блоге появился новый материал. В зависимости от настроек блога они включают ссылку на статью и ее анонс или полный текст. Это отличный источник информации для программы-парсера, которая сможет оперативно получить ссылку на новую статью.
Формат RSS, появившийся в начале двухтысячных годов, уже не так популярен, а RSS-фид для многих сайтов является рудиментом, о котором вебмастера просто забывают.
В блогах, управляемых WordPress, достаточно скопировать в файл functions.php такой код:
function delRSS() {
wp_die(‘<p>RSS-ленты на сайте отключены!</p>’);
}
add_action(‘do_feed’, ‘delRSS’, 1);
add_action(‘do_feed_rdf’, ‘delRSS’, 1);
add_action(‘do_feed_rss’, ‘delRSS’, 1);
add_action(‘do_feed_rss2′, ‘delRSS’, 1);
add_action(‘do_feed_atom’, ‘delRSS’, 1);
При попытке открыть страницы с RSS-фидами будет отображаться html-код, указанный в функции wp_die, а сама страница отдавать код 500 Internal Server Error.
Запрещаем доступ на сайт для парсеров
Мы можем препятствовать программам-парсерам посещать сайт, если внесем изменения в файл настроек сервера .htaccess, расположенный в корневом каталоге сайта. Однако, для этого нужно знать, как парсеры представляются при заходе на сайт.
Некорректные изменения в файле .htaccess могут привести к неработоспособности сайта. Перед внесением правок сделайте резервную копию этого файла.
Чтобы защитить сайт от популярных парсеров (как программ для ПК, так и web-приложений) откройте файл .htaccess в текстовом редакторе, и добавьте следующие строки:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^DISCoPump.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Drip.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Gets.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^IBrowse.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^InternetNinja.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^JustView.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDowntool.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^MisterPiX.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^OfflineExplorer.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^PapaFoto.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Pockey.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Slurp.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^SpaceBison.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebImageCollector.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSucker.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Webster.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ia_archiver.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^lftp.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut.* [OR]
RewriteCond %{HTTP_REFERER} ^http://.*adfilter.com.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://207.198.147.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://www.neocities.* [OR]
RewriteCond %{HTTP_REFERER} ^http://chat.passagen.s.* [OR]
RewriteCond %{HTTP_REFERER} ^http://volpi.sti.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://batepapo0.uol.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://batepapo1.uol.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://batepapo2.uol.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://batepapo3.uol.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://batepapo4.uol.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://batepapo6.uol.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://batepapo7.uol.com.* [OR]
RewriteCond %{HTTP_REFERER} ^http://209.2.137.* [OR]
RewriteCond %{HTTP_REFERER} ^http://207.126.121.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://.*bianca.com/.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://.*angelfire.com/.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://.*hotmail.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://.*yahoo.com.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://.*geocities.com.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://www.partyhouse.*$
RewriteRule ^(.*)$ index.php [F,L]
Когда парсеры будут обращаться к сайту, вместо его страниц они будут получать ошибку 403, означающую ограничение доступа.
В некоторых случаях, в результате редактирования файл .htaccess может автоматически переименовываться, из-за чего CMS и сервер его не распознают. Явный признак этого – страницы записей, категорий и тегов перестают работать (отдают код 404). Убедитесь, что файл называется именно “.htaccess” (т.е. файл без имени, с расширением htaccess)
Блокируем по IP-адресу
Бывают случаи, когда нам известен IP-адрес парсера. Например, если он интегрирован на сайт, который автоматически размещает ваш контент, велика вероятность, что IP парсера совпадет с IP сайта.
Чтобы заблокировать IP-адрес, для начала нужно его узнать. Для этого можно использовать сервис WhoIs, просто введите в поле URL сайта – адрес вы найдете в строке IP Address отчета.
Теперь нужно сгенерировать код, который и обеспечит блокировку. Для этого добавьте полученный IP в HTACCESS Banning Generator и нажмите кнопку Generate Code. Правильно указав IP, вы сможете заблокировать несколько пользователей или целую подсеть.
Осталось только добавить полученный код в файл .htaccess. Готово.
Ставим плагин
ScrapeBreaker – плагин для WordPress, созданный для предотвращения копирования контента сайта. Он блокирует “вытягивание” содержимого с помощью iFrame, а также различных PHP, ASP и похожих скриптов.
Как уверяют разработчики, хотя ScrapeBreaker и не способен предотвратить парсинг в 100% случаев, он может значительно снизить его эффективность на вашем блоге.
Как бы ни старались вебмастера и SEO-оптимизаторы, анатомия web-страниц и сайтов всегда оставляет лазейку для злоумышленников, желающих использовать чужую интеллектуальную собственность. Но, в наших с вами силах заметно усложнить им жизнь, чтобы воровство контента стало неоправданно по трудовым и временным затратам.
Приведенные здесь методы защиты достаточно просты, они не требуют углубленного знания HTML или языков программирования. Все, что вам понадобится – доступ к CMS, FTP вашего блога и текстовый редактор.
Свежие комментарии