Fi1osof
26 июня 2016 г., 18:45

Защита изображений от копирования

В блоге Tips & tricks

Не редко клиенты обращаются с просьбой защитить их картинки и тексты от копирования. Болшинство из них видели такую “фишку”, что вообще не получается вызвать контекстное меню на странице сайта (где бы был пункт “Открыть изображение в новой вкладке” или “Копировать”) и не работают сочетания клавишь типа Ctrl+C или Ctrl+insert. И вот эту “фишку” они и просят на сайте им сделать. Так вот, статья не о том, как сделать эту глупость. Ведь такая “защита” мешает только обычным пользователям. Те, кто хочет именно скопировать в корыстных целях, как правило знает как такую “защиту” обходить. Ведь все, что загружается в браузер пользователя, априори уже на стороне его компьютера, а значит доступно для копироваться. А еще, так как большинство таких хаков основывается на работе javascript, то для отключения этой “защиты” просто достаточно отключить в браузере сам javascript. Не работает javascript — не работает и “защита”.
Но вот сегодня мне попался особенный подопечный… Кличент решил переехать с конструктора сайта на MODX Revolution (заказал перенос) и вот встала задача перенести на новый сайт весь контент, включая картинки. Так как на сайте 200 документов, конечно же это все имело смысл автоматизировать (написать парсер). Но вот что интересно: на сайте картинки прописаны вот таким образом:
...
То есть итоговая картинка генерируется javascript-ом. И это типа призвано защитить сайт от копирования изображений…
Что тут можно сказать? Ну, от копирования это никак не спасает (и ниже я свой код приведу для примера). А вот если javascript-код будет битый, или у клиента отключен, то конкретно на этом сайте картинки в принципе не выводятся :) И вот тут не понятно, стоит ли игра свечь? Ведь подобные ошибки могут серьезно понизить конверсию сайта. Я бы вот не стал такого делать.
А вот для примера код. Задача: получить карту сайта документа, пробежаться по всем страницам, найти картинки, сформировать итоговый УРЛ картинок, скачать их на сайт и набить все это галереями имеющимся документам (они были похожим образом скопированы не за долго до этого).
ini_set('max_execution_time', 0); ignore_user_abort(true); $str = file_get_contents('http://host.name/sitemap.xml'); $xml = simplexml_load_string($str); foreach($xml->url as $u){ $url = (string)$u->loc; if(!preg_match('/http:\/\/host.name\/(shop\/.+)/', $url, $match)){ continue; } // Получаем документ if(!$doc = $modx->getObject('modResource', [ 'uri' => $match[1], ])){ continue; } // Если уже галерея имеется, тоже пропускаем if($doc->getTVValue(12)){ continue; } // Получаем контент документа if(!$content = file_get_contents($url)){ continue; } // Пытаемся найти картинки if(!preg_match_all('/