Защита текста от copy-paste

Главные вкладки

Аватар пользователя Ромка Ромка 3 апреля 2007 в 22:46

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

Чтобы запретить копирование текста, например, можно выводить его в специально сформированном swf-файле, по этому работу по усложнению копи-пейста можно разделить на три этапа:
1. формирование swf-файла;
2. разработка серверного скрипта, который будет общаться с свф-кой;
3. настройка темы друпала, на работу с свф-файлом.

1. Формирование swf-файла.

Собственно, флэшка нужна очень простая: окно с включенной опцией readonly, пара украшательств на вкус разработчика и совсем несложный программный код, вроде этого:
<?php
var sender:LoadVars = new LoadVars();
var loader:LoadVars = new LoadVars();

flashbook.htmlText = "Пожалуйста подождите, идет соединение.
Loading, please wait.";
flashbook.borderColor = 0xCCCCCC;
sender.nid = _root.nid;
sender.title = _root.title;

sender.sendAndLoad(_root.server_script_path, loader, "POST");

loader.onLoad = function(success:Boolean)
{
if (success)
{
if(loader.rMessage == "rOk")
{
var styleObj:TextField.StyleSheet = new TextField.StyleSheet();
styleObj.onLoad = function(success:Boolean) {
if (success) {
flashbook.styleSheet = styleObj;
flashbook.htmlText = loader.rText;
flashbook_title.htmlText = "" + loader.rTitle + "";
}
}
styleObj.load(_root.css_path);

flashbook.htmlText = loader.rText;
}
else
{
flashbook.htmlText = "Ошибка соединения с сервером!
Error connecting to server!";
}
}
}
stop();
?>
Выше не пхп-код, а код на ActionScript 2.0, я просто для красоты форматирования взял его в тэги <? php ?>

Думаю, подробно объяснять этот код не нужно, итак все понятно: событие loader.onLoad происходит после того как объект sender соединился с сервером, который указан в параметрах метода sender.sendAndLoad. В объекте loader сохраняются все данные переданные серверным скриптом.

В прикрепленном к посту архиве лежит исходный fla-файл с этим кодом, а также файлы style.css (нетрудно догадаться, что здесь прописаны стили, используемые флэшкой) и crossdomain.xml. Последний нужен из-за особенностей алгоритмов безопасности, реализованных в флэш-плейере. Для плейреа домены www.example.com и example.com – это два разных домена, по этому если юзер открывает флэшку используя адрес www.example.com/flashbook.swf, а флэшка коннектится к пхп-скрипту по адресу example.com/flashbook.php, то будет возвращена ошибка. Специально для предотвращения подобных ошибок в файле crossdomain.xml должны быть прописаны все синонимы основного адреса сайта.

2. Разработка серверного срипта.

Здесь нет ничего сложного, самый простой вариант такого скрипта будет выглядеть примерно так:
<?php
$nid = $_POST['nid'];
$title = $_POST['title'];
$node = node_load($nid);
echo "rMessage=rOk&rText=" . $node->body . "&rTitle=" . $title;
?>
Хотя, на усмотрение автора, скрипт можно сильно модифицировать. Лежать скрипт должен по пути, который указан в первом параметре метода sender.sendAndLoad().

3. Разработка шаблона, использующего флэшку.

Если необходимо защитить от копирования все ноды типа page, то можно модифицировать файл node-page.tpl.php из вашей темы. Либо можно создать с помощью CCK новый тип контента, например "flashpage" и в теме создать файл node-flashpage.tpl.php как копию node.tpl.php и внести в него изменения, описанные ниже.

Небольшое отступление. Для проверки, установлен ли на компьютере пользователя Flash Player нужной версии, я в примере использую SWFObject, хотя можно использовать любой другой метод.

Итак, сначала в заголовке страницы нужно включить подключить файл swfobject.js:
<script type="text/javascript" src="./js/swfobject.js"></script>

Затем надо заменить код "print $node->content;" на примерно следующий:
<?php

У вас не установлен FlashPlayer нужной версии

var so2 = new SWFObject("./swf/flashbook.swf", "flashbook", "635", "810", "7", "#FFFFFF", true);
so2.addVariable("nid", "<?=$node->nid? >");
so2.addVariable("server_script_path", "http://WWW.EXAMPLE.COM/modules/flashbook/flashbook.php");
so2.addVariable("css_path", "WWW.EXAMPLE.COM/swf/styles.css");
so2.addVariable("title", "Заголовок – <?=$node->title? >");
so2.write("flashbooklayer");

?>
(Обратите внимание на то, что надо убрать пробел перед ">" в конце строки "so2.addVariable("nid", "<?=$node->nid?>");", я поставил его, так как иначе скрипт форума криво обрезает исходник). "WWW.EXAMPLE.COM" надо заменить на адрес сайта, на котором все это дело используется.

Здесь тоже все просто: сначала проверяем наличие нужной версии плейера, если его нет, то выводим сообщение об ошибке. Затем показываем флэшку и передаем ей:
1. nid ноды, которую надо вывести на экран;
2. заголовок окна, в котором будет выведен текст;
3. путь к серверному скрипту, который был создан во втором пункте;
4. путь к файлу стилей, который используется в первом пункте.

Всё.

Разумеется, все три этапа можно модифицировать под свои нужды, у меня, например, используется более сложная версия swf-файла, я её для простоты уменьшил немного.

Теоретически, флэшку, прикрепленную к этому посту можно использовать для любого сайта, так как все переменные указываются вне самой swf-ки. Единственный недостаток заключается в том, что для изменения дизайна флэшки, таки придется её перекомпилировать, так как список тэгов, которые можно использовать в флэше сильно ограничен (p, b, i, u, a, br, img, font и стили, вроде это все) и с помощью html её передизайнить не получится...

ВложениеРазмер
Иконка пакета flashbook.zip6.4 КБ

Комментарии

Аватар пользователя PVasili PVasili 3 апреля 2007 в 23:25

Такую энергию и в мирных целях бы Smile
Попробуй выдать пример(жизненный),когда такая возможность жизненно необходима. (стоит ли игра свечь)
======================================================
[url=http://wiki.drupal.ru]Документация[/url],[url=http://wiki.drupal.ru/doc/poleznye_ssylki_dlya_dizainerov]Дизайн[/url],[url=http://wiki.drupal.ru/doc/gotovye_perevody]Переводы[/url]

Аватар пользователя danger4k danger4k 4 апреля 2007 в 1:30

одна большая трабла...всё здорово...но поисковики флеш читать не умеют...и того Ваш сайт не будет виден поисковикам...и на нем не будет посетителей...

Аватар пользователя Natalie Natalie 4 апреля 2007 в 2:11

А по-моему полезная вещь. Те, кто сомневаются, пусть сначала сделают сайт с большим количеством оригинального или переводного контента, а потом пусть какие-нибудь бакланы это тут же стащат, и я посмотрю, что вы тогда скажете.


- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Переводы некоторых модулей.
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2

Аватар пользователя PVasili PVasili 4 апреля 2007 в 10:45

Примеры можно? URL...
Я не видел в рунете действительно оригинальные сайты с большим количеством оригинального или переводного контента, который все воруют.
А если и воруют, то это только поднимает рейтинг первоисточнику. А примерам, был бы очень рад Smile

======================================================
[url=http://wiki.drupal.ru]Документация[/url],[url=http://wiki.drupal.ru/doc/poleznye_ssylki_dlya_dizainerov]Дизайн[/url],[url=http://wiki.drupal.ru/doc/gotovye_perevody]Переводы[/url]

Аватар пользователя qman qman 7 апреля 2007 в 22:39

подскажите как поисковая система, определит какой сайт является первоисточник?
Ведь при размещении материала на 3их сайтах далеко не всегда указываются ссылки на первоисточник.
Или я что то не знаю?

Аватар пользователя achadidi achadidi 14 июня 2009 в 18:48

зря вы так... у меня с сайта www.achadidi.narod.ru (статьи все самописные) постоянно разные турфирмы что-то воруют, от 10 покраж обнаруживаю при каждой проверке, не заметила что бы это поднимало рейтинг первоисточнику%(( последние годы приходится уродовать фото штампами из-за этого, с текстами ничего сделать не могу, увы...
есть еще 2 маленьких сайта на народе, так их у особо одаренных хватало ума скопировать просто целиком...

Аватар пользователя KCEOH KCEOH 4 апреля 2007 в 8:09

А поисковикам и не надо это читать Smile Иначе умный посетитель выдерет тексты из кэша поисковика.

Натали все сказала, добавить нечего. Порой это действительно нужная фишка.

Аватар пользователя Ромка Ромка 4 апреля 2007 в 8:48

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

Моё личное ИМХО - игра свеч не стоит, но заказчик разный бывает

Да я и не спорю, при большом желании текст скопировать удастся, но стоит ли игра (по распознаванию 200-300 страниц текста) свеч, тоже немаловажный вопрос Lol

Кстати, я уже придумал как сделать универсальную флэшку, которую не придется перекомпилировать под каждый сайт, сейчас потестирую способ и ближе к вечеру подправлю первый пост.

Аватар пользователя Natalie Natalie 4 апреля 2007 в 19:49

PVasili, плохо ищите или не на те сайты ходите. Примеров полно знаю, один такой случай произошел лично со мной, так что с тех пор я стала серьезно относиться к таким вещам. Ссылку дать не могу, потому что больше к этому проекту не имею отношения. Но сейчас я перевожу статьи по одной теме, которых пока точно нет в рунете (а то бы не было смысла переводить), и мне не хочется, чтобы кто-то их легко стащил после того, как я потратила столько времени на перевод. Или вот, спросите Ainur'a, он как раз писал про эту проблему.


- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Переводы некоторых модулей.
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2

Аватар пользователя Natalie Natalie 4 апреля 2007 в 19:51

Да, воруют конечно не все - не все всем интересно, но такое случается даже в самых узких нишах и даже один такой инцидент действует на нервы. Как вы понимаете, ссылку на первоисточник обычно не ставят Wink


- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Переводы некоторых модулей.
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2

Аватар пользователя PVasili PVasili 4 апреля 2007 в 20:10

2Natalie с 94-95 года я не встречал Smile
Или отборная "клубничка" или конторы ммм(млм и т.д.).
В остальном, если информация сугубо специализированая её держат у себя или продают(поскольку круг довольно узок там дешевле купить).Ни кто даже не будет думать как вскрывать(дороже встанет).
Подписка, тогда заплативший сам не будет способствовать распространению.
На массовом рынке все автоматически становиться общедоступнем (за исключением случая с неуловимым индейцем).Живой пример 1с,несмотря на довольно жесткую политику по защите софт и документацию всегда(практически) можно найти в сети.
Кто воровал(и не платил) так и будет продолжать это делать...
А флеш защиту вскроют, начиная от декомпилирования swf (написав "облегченную" версию),заканчивая скачкой базы с текстом.При том, сделает жто студент чисто ради спортивнего интереса :).
Посему,полезнее заняться чем-нибудь более полезным.
======================================================
[url=http://wiki.drupal.ru]Документация[/url],[url=http://wiki.drupal.ru/doc/poleznye_ssylki_dlya_dizainerov]Дизайн[/url],[url=http://wiki.drupal.ru/doc/gotovye_perevody]Переводы[/url]

Аватар пользователя Natalie Natalie 4 апреля 2007 в 20:32

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

Я прекрасно понимаю, что любую защиту можно вскрыть, но большинство таких бакланов возиться просто не станет (они любят легкую поживу), а если найдутся особо упертые, то им хотя бы придется повозиться Smile Поэтому я присматриваюсь к какому-нибудь виду защиты, хотя пока не знаю точно, на каком лучше остановиться.


- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Переводы некоторых модулей.
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2

Аватар пользователя PVasili PVasili 4 апреля 2007 в 21:04

2Natalie: а зачем вам связываться с бакланами(бомжами)? Пусть питаются тем, что урвут...
Заведите себе блог,пишите туда, или в приличные места(питайтесь хорошей пищей).
Тут, например,вас все читают, знают и уважают :),а авторитет free хостинга врядли будет выше...
Умные поймут,а бакланами объяснять их долю зачем(опускаться на их уровень)?
У меня тоже есть свой "шароварный" опыт, в государстве,где все все тырят с этим сложно...Хотя ситуация заметно изменилась и большинству проще заплатить(тот же пример 1с с играми),чем быть помоищником...

Надеюсь вы разрешите мне, как В.Х. вас wiki-фицировать тут? Smile
======================================================
[url=http://wiki.drupal.ru]Документация[/url],[url=http://wiki.drupal.ru/doc/poleznye_ssylki_dlya_dizainerov]Дизайн[/url],[url=http://wiki.drupal.ru/doc/gotovye_perevody]Переводы[/url]

Аватар пользователя Natalie Natalie 4 апреля 2007 в 22:05

PVasili, я не хочу связываться, но я хочу усложнить им жизнь, если можно... вот такая я вредная Smile
Насчет wiki - я вроде уже говорила, что можно?


- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Переводы некоторых модулей.
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2

Аватар пользователя KBH KBH 5 апреля 2007 в 3:40

всегда можно скопировать (это только вопрос времени)

угу. в зависимости от сложности это время составляет, примерно, от 1 до 7 дней Wink

Аватар пользователя coyotle coyotle 5 апреля 2007 в 10:20

Глупая затея мне кажется. Такие штуки создают проблемы не только "ворам", но и обычным пользователям. То же и с DRM (защита цифрового контента) - вроде для благих целей, для борьбы с пиратством, а страдают пользователи.
Некоторые инет-библиотеки в стремлении защитить свой контент запихивают его в исполняемые файлы, а если у меня *nix или mac os или нет флэшплеера, или хочу почитать ваш текст на старом кпк?!
Можно указывать на сайте, что при копировании необходимо указать первоисточник, а если обнаружили где-то копию всегда можно отписать автору чтобы разместил ссылку на ваш ресурс (мало кто отказывает). Можно размещать свой контент под различными лицензиями и т.п. но блин не надо усложнять жизнь

Аватар пользователя Ромка Ромка 5 апреля 2007 в 14:47

Исправил первый пост и файл с примером. Теперь сделал так, что все переменные указываются вне swf-файла, по этому, при желании, свф-ку из прикрепленного архива можно использовать хоть сейчас.

Глупая затея мне кажется. Такие штуки создают проблемы не только "ворам", но и обычным пользователям

На вкус и цвет. Пользователю проблем точно никаких не создается: и прочитать, и распечатать текст можно без проблем. В общем-то и распознать его можно, при желании, но вот банальный copy-paste уже не сработает и это отсеет, цитирую Natalie, 90% "бакланов".

Аватар пользователя Nick Nick 13 апреля 2007 в 22:38

Это принесет проблемы пользователям у которых нет flash (честно говоря, странно, что этот аргумент никто не привел).
Например, для amd64 flash-pluginа вообще нет. Хотя, конечно, таких пользователей немного...

Аватар пользователя Natalie Natalie 5 апреля 2007 в 17:46

Ромка, спасибо! Вопрос: а как настроить защиту по ролям: например, показывать флеш анонимам, но обычный текст зарегистрированным пользователям?


- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Переводы некоторых модулей.
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2

Аватар пользователя Ромка Ромка 5 апреля 2007 в 22:43

Хммм... Честно говоря оформить этот код в виде модуля руки не дошли... Но ведь можно просто в файле темы написать что-то типа:
<?php
global $user;
if($user->uid != 0)
{
/* Это для авторизованных юзеров, просто текст:*/
print $node->body;
}
else
{
/*
А тут код выводящий флэшку.
*/
}
?>

Аватар пользователя Ромка Ромка 8 апреля 2007 в 12:36

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

Аватар пользователя Ромка Ромка 17 апреля 2007 в 15:52

Вот наткнулся, случайно: Защита информации на веб-странице
http://experiment.net.ru/read/?nstat=10

Если страницу можно сохранить на ХДД, то никакая защита от копи-пейста не поможет. В моем примере сохранить страницу можно, но текста в ней не будет... Правда, как я уже не раз писал выше, при должном упорстве все равно скопировать данные получится.

Это принесет проблемы пользователям у которых нет flash (честно говоря, странно, что этот аргумент никто не привел).
Например, для amd64 flash-pluginа вообще нет. Хотя, конечно, таких пользователей немного...

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

Аватар пользователя Analitic Analitic 14 октября 2008 в 14:37

Спасибо очень нужная вещь, но остановился на том, что не нашел "print $node->content;"

Вот код моего node.tpl.php:

<?php
// $Id: node.tpl.php,v 1.5 2007/10/11 09:51:29 goba Exp $
?>
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>">

<?php print $picture ?>

<?php if ($page == 0): ?>
  <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>

  <?php if ($submitted): ?>
    <span class="submitted"><?php print $submitted; ?></span>
  <?php endif; ?>

  <div class="content clear-block">
    <?php print $content ?>
  </div>

  <div class="clear-block">
    <div class="meta">
    <?php if ($taxonomy): ?>
      <div class="terms"><?php print $terms ?></div>
    <?php endif;?>
    </div>

    <?php if ($links): ?>
      <div class="links"><?php print $links; ?></div>
    <?php endif; ?>
  </div>

</div>

Пожалуйста выложите, текст нода, как должно выглядеть, заранее благодарен

Аватар пользователя Valeratal Valeratal 14 октября 2008 в 16:44

все это интересно, но защита от любителей - блоггеров Smile
серьезные люди напрягут секретаршу Smile

кстати, как с индексированием таких страниц?

Аватар пользователя shamaner shamaner 17 октября 2008 в 0:49

"Valeratal" wrote:
кстати, как с индексированием таких страниц?

у яши как я помню, вроде уже норма. а вообще для индекса параллельно формироваться xml поток должен.

Аватар пользователя faraon faraon 14 июня 2009 в 19:29

Хм, если контент хороший и уникальный, он интересен пользователям. Ценность уникального контента для самого сайта в том, что его индексируют поисковики и из-за этого есть посещаемость. Если ПС не видят контент, то рано или поздно он при любой защите станет чужим и, при этом, ПС, не видя оригинала, признают первоисточником вора. Смысл использовать такую защиту есть только на сильно популярных сайтах, не заботясь об индексации (и, в некотором роде и в некоторых случаях, о пользователях)

Аватар пользователя aguri aguri 16 ноября 2010 в 23:03

achadidi, в какой-то степени может спасти перелинковка нод в вики-стиле. Ручками все это выцарапывать - айайаюшки, и не каждый блоггер или веб0мастер знает, как регулярками повырезать ваши линки из базы. Только ссылки должны быть абсолютными.

Аватар пользователя Bel-Den Bel-Den 10 декабря 2010 в 11:38

Собственно вопрос по второму пункту: "2. Разработка серверного срипта." - какой файл создать, куда положить, что изменить, качающееся своего сервера или ничего менять не нужно?, если можно - то по пальцам)))
я конечно подозреваю что путь и имя: http://WWW.EXAMPLE.COM/modules/flashbook/flashbook.php, а флэшку вот сюда: /swf/flashbook.swf