Запрет на копирование текста на сайте: рабочие способы и подводные камни

8276

Периодически мне пишут с просьбой: «подскажи, как сделать запрет на копирование текста на сайте». Желание понятное — тексты стоят времени и денег, хочется защитить их от воровства. В этой статье разберёмся, что реально можно сделать на стороне браузера, какой код использовать и почему такие защиты всё равно обходятся за пару секунд.

Запрет на копирование текста

Запрет на копирование текста: чего вы ждёте и что получаете на самом деле

Сначала немного честности. Любой запрет копирования текста в браузере решает только одну задачу — мешает обычным пользователям выделять текст мышкой и жать Ctrl+C. На этом его возможности заканчиваются.

То, от чего все обычно хотят защититься:

  • боты и парсеры, которые вытаскивают контент по HTML-коду;
  • копирование через «Просмотр кода страницы»;
  • копирование из кэша поисковиков или RSS-ленты;
  • скриншоты и распознавание текста.

От всего этого запрет на копирование текста на сайте не спасает вообще никак. Поэтому я отношусь к таким решениям как к лёгкому «барьеру от случайного копирования», а не как к защите авторских прав.

Простой запрет выделения текста через CSS

Самый быстрый способ запретить выделение текста — использовать свойство user-select. Добавляем класс, который будем навешивать на нужные блоки:

.no-copy {
    -webkit-user-select: none; /* Chrome, Safari, новые Edge */
    -moz-user-select: none;    /* Firefox */
    -ms-user-select: none;     /* старые IE/Edge */
    user-select: none;         /* стандартное свойство */
}

Далее оборачиваете нужный контент в элемент с этим классом, например:

<div class="entry-content no-copy">
    ...текст статьи...
</div>

Что даёт такой запрет:

  • нельзя выделить текст мышью;
  • не работает двойной клик по слову;
  • часть пользователей на этом этапе просто сдаётся.

Что не даёт:

  • исходный HTML по-прежнему доступен через «Просмотр кода»;
  • боты спокойно читают текст;
  • стили можно отключить в DevTools или через пользовательский CSS.

Запрет контекстного меню и сочетаний клавиш через JavaScript

Следующий уровень — запретить правый клик и основные горячие клавиши. Это делается на чистом JavaScript, без библиотек.

Блокируем контекстное меню

<script>
document.addEventListener('contextmenu', function (event) {
    event.preventDefault();
});
</script>

Теперь при клике правой кнопкой мыши меню браузера не появится. Многие «новички» на этом заканчивают попытки что-то скопировать.

Отключаем базовые сочетания клавиш

Можно дополнительно перехватить Ctrl+C, Ctrl+S, Ctrl+U и другие горячие клавиши:

<script>
document.addEventListener('keydown', function (event) {
    // Ctrl/Cmd + C
    if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() ==='c') {
        event.preventDefault();
    }

    // Ctrl/Cmd + S
    if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() ==='s') {
        event.preventDefault();
    }

    // Ctrl/Cmd + U (просмотр кода страницы в некоторых браузерах)
    if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() ==='u') {
        event.preventDefault();
    }
});
</script>

Ещё раз: такой запрет копирования текста защищает только от самого базового сценария «выделил — скопировал». Любой человек, который умеет открывать инструменты разработчика, обойдёт это за пару кликов.

Пример для WordPress: подключаем скрипт правильно

Если сайт на WordPress, я предпочитаю не вставлять скрипты в шаблон руками, а подключать их через functions.php. Ниже базовый пример.

<?php
// Добавляем запрет копирования текста на всём сайте
add_action( 'wp_enqueue_scripts', 'mfb_add_copy_protect_script' );

function mfb_add_copy_protect_script() {
    // Регистрируем и подключаем пустой скрипт-заглушку
    wp_register_script(
        'mfb-copy-protect',
        false,
        array(),
        null,
        true
    );

    wp_enqueue_script( 'mfb-copy-protect' );

    // Встраиваем JS-код прямо в этот скрипт
    $js = <<<JS
document.addEventListener('contextmenu', function (event) {
    event.preventDefault();
});

document.addEventListener('keydown', function (event) {
    if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() ==='c') {
        event.preventDefault();
    }
});
JS;

    wp_add_inline_script( 'mfb-copy-protect', $js );
}

Если хотите ограничивать только часть сайта (например, записи блога), можно добавить условие is_single() или проверку нужного типа записей.

Как снимают и обходят запрет копирования текста

Раз уж запрос «как обойти запрет копирования текста на сайте» тоже существует, проговорю важный момент. Любое ограничение, которое работает в браузере, можно обойти в этом же браузере. Обычно это делается так:

  • открыть «Просмотр кода страницы» и скопировать текст из исходника;
  • отключить JavaScript (в настройках или через расширение) и обновить страницу;
  • в DevTools снять галочку с правила user-select: none или просто удалить класс no-copy;
  • скопировать текст из кэша поисковой системы или RSS-ленты.

Я это описываю не для того, чтобы подсказать, как «украсть текст», а для понимания: если человек умеет пользоваться браузером на уровне разработчика, ваши запреты его не остановят. То есть рассчитывать на такие методы защиты как на серьёзный барьер бессмысленно.

Когда запрет копирования текста всё же имеет смысл

Лично я использую подобные приёмы крайне редко, но есть ситуации, где лёгкий запрет выделения текста может быть полезен:

  • закрытые разделы с платным контентом, где вы дополнительно защищаете материал от случайного копирования;
  • лендинги с продающими текстами, которые часто воруют именно копированием мышкой;
  • интерактивные тренажёры, тесты, обучающие задания, где важно, чтобы пользователь не копировал условия задачи, а работал с интерфейсом.

Даже в этих сценариях я воспринимаю запрет как «анти-ленивую защиту»: кто захочет украсть контент любой ценой — сделает это. Но от случайного копирования и слишком ленивых пользователей такая защита действительно фильтрует часть попыток.

Что лучше использовать вместо жёсткого запрета копирования

Если ваша цель — не просто «закрыть текст от Ctrl+C», а реально защитить контент, я бы смотрел в сторону других подходов:

  • Уникальный опыт и примеры. Чем больше в тексте ваших личных кейсов, цифр, скриншотов и фотографий, тем сложнее его воровать без правок — слишком заметно.
  • Водяные знаки на изображениях. Для галерей, скриншотов и инфографики простой логотип уже заставляет задуматься.
  • Аккуратные напоминания о копирайте. Короткий текст внизу страницы с просьбой ставить ссылку на источник работает лучше, чем жёсткий запрет.
  • Жалоба хостеру и в поисковики. Если контент действительно воруют один в один, никто не отменял DMCA/аналогичные жалобы.
  • Технический контроль. Обрезанный RSS, ограничение полного текста в фидах, мониторинг копий через поиск.

Итог: стоит ли вообще ставить запрет на копирование текста

Моё мнение простое:

  • если цель — полностью защитить контент, запрет копирования текста на сайте не сработает;
  • если хочется слегка усложнить жизнь тем, кто копирует всё подряд мышкой, то лёгкий запрет выделения и правого клика можно использовать;
  • обязательно взвесьте UX: часть читателей вы просто раздражаете, не давая им выделить цитату или отправить кусок текста другу.

Я бы рассматривал такие скрипты как дополнительный фильтр от «случайного копирования», а не как способ защиты. Основа всё равно одна: писать полезный контент, который ценен в первую очередь у вас, а не на чужом сайте.

8
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(11 голосов, в среднем: 4.6 из 5)
не скупись ☝️ оцени статью
Подписка на обновления:
Автор блога Рябухин Максим

Я фрилансер веб-разработчик. Последние несколько лет занимаюсь версткой и веб-программированием на PHP и Javascript. Если вам понадобится помощь с блогом Wordpress, либо адаптация сайта, я всегда рад помочь.

связаться
Вместе с этим советую почитать:

Оставьте комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
не пытайтесь оскорбить автора, либо участников блога, ваши комментарии все равно не будут промодерированы!
у меня есть сайт

комментариев: 8
  • MrVigner

    Не вижу смысла в запрещении копирования, у меня благодаря нему немало входящих ссылок появилось. Пользователи копируют статью или ее часть, а я внутри абзацов делаю перелинковку, в результате пользуясь визуальным редактором они вставляют текст в сообщение на форуме или свой сайт вместе с ссылками на мой сайт :-)

    Ответить
    • Галина

      MrVigner, Ой как ты всех обдурил?!))) Меня лично это бесит точно так же как и запрет копирования!

      Ответить
      • MrVigner

        Галина, за все приходиться платить) Написал я текст потратив на это время и силы, а какой-то школьник хочет просто скопировать текст и выдать его за свой поменяв название сайта в статье. Это нарушения авторских прав, так что ссылки оставшийся в тексте — минимальная плата. Учитесь уважать чужой труд, а не бесится :-)

        Ответить
        • Юрий

          Полностью согласен. Это касается не только контента, но и дизайна сайта. А бывает ведь и так, что целиком сайты копируют со всем текстом, дизайном, картинками только на другом домене. Вот тогда полная печаль.

          Ответить
  • Bogutskiy

    Как же надоели воришки контента… С фразой про копирование согласен)
    Я добавляю свои тексты в оригиналы яндекс и гугл.

    Ответить
    • Максим Рябухин

      Bogutskiy, аналогично ;-)

      Ответить
    • Владислав

      Bogutskiy, у вас воруют? У меня ни разу за 2 года не воровали :C
      Даже обидно как-то, хотя блог более-менее популярен.

      Ответить
      • Максим Рябухин

        Владислав, даже парсят без разбора, был в шоке, но моя личная статья авторская валялась на каком-то под минусинском сайте, бывает и такое.. :sad:

        Ответить
показать все