Начнем с того, что абсолютной защиты текста от копирования не существует. То, что выложено в интернет, находится в общем доступе, и каждый посетитель, зашедший на ваш сайт, может просто сохранить страницу с текстом к себе на компьютер. Тем не менее, существует ряд технических способов, позволяющих усложнить жизнь злоумышленнику, а также напомнить ему о том, что воровство контента – это уголовно наказуемое деяние.
Для начала разделим всех копипастеров на тех, кто копирует текст вручную, открыв окно браузера, и на тех, кто использует для воровства специальные парсеры.
Простейший JavaScript, запрещающий копирование
<script type="text/javascript">
document.ondragstart = noselect;
// запрет на перетаскивание
document.onselectstart = noselect;
// запрет на выделение элементов страницы
document.oncontextmenu = noselect;
// запрет на выведение контекстного меню
function noselect() {return false;}
</script>
Схожий способ – просто прописать в коде body
onbeforecopy="return false" oncontextmenu="return false" oncopy="return false" ondragstart="return false" onselect="return false" onselectstart="return false"
Позволяет избавиться от наиболее малоопытных копипастеров, например, домохозяек, крадущих рецепты с сайта в свой блог.
Очень неудобен тем, что запрещает использовать контекстное меню, открывающееся после клика правой кнопкой мыши. В результате честные посетители не могут перейти по ссылке, кликнув по ним правой кнопкой, чтобы открыть в новом окне, а также выделить интересный им текст, чтобы выбрать в контекстном меню пункт «Искать в Google».
Более элегантное решение – функция, добавляющая к скопированному тексту ссылку на источник.
Просто разместите в корне сайта файл copy.js (или любое другое название) с кодом:
function addLink() {
var body_element = document.getElementsByTagName('body')[0];
var selection;
selection = window.getSelection();
var pagelink = "<br/>Источник: <a href='"+document.location.href+"'>"+document.location.href+"</a>";
var copytext = selection + pagelink;
var newdiv = document.createElement('div');
newdiv.style.position='absolute';
newdiv.style.left='-99999px';
body_element.appendChild(newdiv);
newdiv.innerHTML = copytext;
selection.selectAllChildren(newdiv);
window.setTimeout(function() {
body_element.removeChild(newdiv);
},0);
}
document.oncopy = addLink;
И просто поставьте на него ссылку в конце шаблона сайта
<script type="text/javascript" src="http://vash-domen.ru/copy.js"></script>
После этого в каждом скопированном участке текста будет располагаться ссылка на ваш web-ресурс. Разумеется, копипастер может удалить ссылку вручную при размещении контента, однако велика вероятность, что он просто не заметит ее, так как местоположение линка несколько смещено от основного контента.
В этом случае ваш контент все равно будет скопирован, но вы получите большое количество ссылок с самых различных сайтов, где размещен ваш текст.
Просто пропишите в файл CSS код
<style type="text/css">
/* Отключение возможности выделения в теге DIV */
.noselect {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
}
</style>
Преимущество этого метода в том, что злоумышленник не сможет скопировать текст, просто отключив JavaScript в браузере. Однако ни JavaScript, ни CSS не помогут вам, ведь копипастер может скопировать защищенный текст с сайта, просто посмотрев исходный код страницы, вызываемый сочетанием клавиш Ctrl+U, о котором сегодня знает каждый web-мастер.
Парсинг (или граббинг) предполагает программное получение страниц сайта путем последовательного получения страниц web-ресурса и последующего вырезания из них необходимого текста. Обычно парсер пишется под каждый сайт отдельно, с учетом его структуры и исходного кода.
Парсер обязательно включает в себя регулярное выражение, позволяющее выделить необходимый текст из исходного кода. Кроме того, зачастую в нем имеется функция, вырезающая все HTML-теги, включая ссылки, оставляя лишь необходимые для форматирования теги абзацев. В результате парсер отправляет на сайт злоумышленника или складывает в базу данных чистый текст, не содержащий ничего лишнего.
Задача web-мастера – затруднить работу парсера, а также пишущего его программиста, так как большинству копипастеров проще найти более простой для парсинга сайт, нежели мучиться со сложной задачей.
Если основной контент содержится в коде <div id="bla-bla-bla"></div>, вы можете случайным образом добавить на страницу аналогичный контейнер, содержимое в котором меняется случайно (например, <div id="bla-bla-bla">arjiefjriofe</div>). В результате граббер начнет утягивать не основной текст, а случайно сгенерированный набор букв.
Также можно случайным образом менять оформление страницы, например, попеременно отображая то <div id="bla-bla-bla"></div>, то <div id="bla-bla"></div>, то <div id="bla"></div>. В этом случае парсер просто не сможет определить местонахождение основного текста.
Если выявили IP-адрес злоумышленника, можно не банить его, а отдавать ему контент, отличный от основного содержимого сайта. Например, можете заменить часть русских букв А и О английскими, а результате чего шанс попадания под фильтр ресурса копипастера заметно повысится.
Нередко копипастеры не скачивают изображения на сервер, а просто копируют HTML код картинки и выводят ее на своем сайте. Простой способ запретить использование ваших картинок – прописать в файл .htaccess код:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?site\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
На изображение nohotlink.jpg можно нанести текст с указанием того, что изображение было украдено с вашего сайта.
Однако данный способ защитит только от личинга изображений, а не их копирования на сервер.
Используя различные способы защиты текста от копирования, обязательно подумайте о том, чтобы не причинять неудобств своим посетителям. Блокировка правой кнопки может привести к тому, что пользователям будет неудобно переходить по ссылкам, отключение буфера обмена – к тому, что они не смогут вставить в строку поиска название товара, который хотят купить. При этом, вы так и не сможете сделать защиту текста абсолютной, ведь на крайний случай, всегда есть возможность скопировать защищенный текст с сайта, просто сделав его скриншот и распознав в FineReader.