Один из моих стародавних проектов, который тогда был свеженаписанным и им активно пользовались, как-то подвергся ненормальной активности, если на вид, то нагрузкой от какого-то сканера. Мне повезло, что в это же время занимался его доработкой и в реальном времени заметил неладное. Сам сайт был публичный и некоммерческий, имел большое количество общедоступного контента, но мне не хотелось, чтобы по сети гулял его не обновляемый клон и портил репутацию ресурсу. Поэтому ещё заранее вставил примитивную проверку в javascript страниц - проверялся текущий домен и в случае неправильного был редирект на нужный.
После всплеска посещаемости сайта мне не составило труда по названию сайта найти обсуждение на специализированном форуме, где некто N спрашивал, как настроить программу для скачивания и при этом вырезать защитный скрипт. Так как вопрос был задан не ранее получаса назад, было понятно, что у меня есть время усилить защиту, что и было сделано далее.
Для начала переписал скрипт проверки домена на случайно генерируемый для каждой страницы, рандомно менялось его название, содержимое, строка домена разбивалась на части, а самих проверок могло быть несколько. Таким образом, получив ещё какое-то время, стал изучать программу, с помощью которой велось скачивание. На форуме создатели этой программы давали рекомендации господину N как настроить конфигурацию и обойти защиту. Сам сайт не был коммерческим, как уже писал, особо ничего не терялось, ну кроме репутации сайта, поэтому стало интересным, насколько затянется противостояние.
Через некоторое время на форуме заметили, что код сайта относящийся к защите, стал меняться сам. Ни о каких нейросетках тогда и разговоров не было, поэтому участники обсуждения были весьма удивлены. Они давали советы незадачливому N и пока тот вносил исправления и перезапускал парсер, соответствующие защитные меры уже внедрялись на целевом сайте. Естественно, через некоторое время это развлекательное действие закончилось. Проект так и остался уникальным, но мне нужно было сделать выводы из произошедшего, так как у меня был другой подобный сайт, но коммерческой направленности, и нужно было его как-то обезопасить.
Вот перечень мер, которые были предприняты:
-
Как уже выше описывалось, скрипт проверяет текущий домен и в случае отличий редиректит на правильный. Такой код легко исправить поиском по названию домена, поэтому строка с ним произвольно разбивалась с последующей конкатенацией. Это можно обойти локально, сделав локальный домен как в оригинале, но в интернете такой сайт не разместить.
-
Следить за частотой посещения страниц с одного IP и в случае странностей, например, больше полусотни страниц в минуту, накладывать на этот IP бан. Обходится через Tor браузер с постоянной сменой конечного адреса и сменой IP.
-
Скрытые ссылки, например, с нулевым размером или прозрачностью. Все, кто проходит по этим ссылкам - бот, следовательно, сразу в бан. Проблема в том, что это может быть поисковый бот, поэтому способ работает только для внутренних страниц сайта, скрытых за авторизацией.
-
Капча через каждые несколько десятков страниц. Это может быть неприятно для пользователей, поэтому заменил капчу на показ полезных советов по сайту. Такой совет блокирует все страницы, пока пользователь не закроет его, но, если скачать сайт программой - у большинства страниц вместо контента будет висеть этот попап и всё. Для успеха - контент должен подгружаться после закрытия блока совета. Как и в предыдущем случае совет хорош только для закрытых разделов.
-
Парсер можно настроить так, чтобы он качал только контент страниц и раскладывал по связанным файлам, типа каталога. Здесь вставка javascript не поможет, но может помочь отсутствие css для защиты. Например, если с текстом смешаны случайные символы и видимость их запрещена в css различными способами. На сайте это выглядит как исходный текст, при копировании - нечитаемая тарабарщина. Если распределение тегов и название их сделать случайным, а некоторыми видимыми обернуть обычный текст, вычищать их программно пропадет всякое желание. Хорошо работает только для внутренних страниц, опять же для правильной индексации поисковыми ботами. Из минусов - в браузере можно показать страницу текстом и если пользователь предпочтёт этот вариант, скрытые символы тоже будут видны. Возможно, в оглавлении, скрытым текстом также нужно указать ему, что происходит.
-
Если это скрытая часть сайта, куда можно попасть после авторизации, неплохо будет оставить в коде метки с ID пользователя, чтобы их трудно было идентифицировать со стороны. В дальнейшем это поможет разобраться, каким из пользователей был скачан сайт по скопированным страницам (если будут обнаружены).
Эти и другие способы помогут вам защититься от копирования сайта полностью или отдельных его частей. Возможна и их комбинация, например, при ненормальной нагрузке на сайт, а перебор страниц выявить несложно, включается режим, который чаще показывает капчу или включает новый вид защиты, который нельзя предварительно обнаружить в коде. Естественно, такие меры подходят для сайтов с очень востребованным контентом или сугубо коммерческих, представляющих информационные услуги различного характера. То есть у кого-то должна быть веская причина и заинтересованность заняться скачиванием конкретного сайта.