Почему JavaScript не защищает HTML от копирования

Разбор запрета выделения, перетаскивания и контекстного меню в JavaScript. Почему он не защищает текст и чем управление HTTP-кэшем отличается от запрета копирования.

Содержание статьи

Что делал старый пример

Ниже — обработчики из заметки 2018 года. Они перезаписывают обработчики документа и в поддерживающих их браузерах отменяют перетаскивание, выделение и контекстное меню. Для нового интерфейса такой общий запрет не рекомендуется.

document.ondragstart = test;
document.onselectstart = test;
document.oncontextmenu = test;
function test() {
  return false;
}

Сохранённый демопример показывает это ограниченное поведение, а не защищённую от сохранения страницу.

Кэширование — отдельная задача

Строка META HTTP-EQUIV=“no-cache” из первоначальной заметки не является корректной универсальной настройкой кэша. Политику задавайте HTTP-заголовками сервера. Cache-Control: no-cache допускает хранение ответа, но требует проверки перед повторным использованием. Cache-Control: no-store запрещает кэшу сохранять ответ по правилам HTTP; это всё равно не мешает человеку скопировать полученный текст.

Если задача — контролировать доступ к непубличному материалу, проверяйте авторизацию на сервере до отправки содержимого. Если материал публичный, рассчитывайте на то, что его технически можно сохранить.

Проверенные источники

developer.mozilla.org, developer.mozilla.org. Проверено 10 октября 2026 года.

Все материалы раздела «Программирование»Каталог инструментов