Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Защита от копирования .. (https://javascript.ru/forum/dom-window/56726-zashhita-ot-kopirovaniya.html)

alextwin 20.10.2015 21:20

Georka, грамотный алгоритм защиты здесь такой:
1. берем имя домена того сайта, к которому нужно привязать js скрипт и вычисляем от этой строки какую-нибудь хэш функцию, запоминаем
2. в защищаемом скрипте читаем через window.location текущий домен и считаем ту же хэш функцию от полученного имени домена
3. сравниваем результаты 1 и 2, если не совпадают, значит скрипт скопировали и залили на другой сайт - показываем сообщение пользователю или делаем редирект на страницу с сообщением "скрипт скопирован с supersitename, это плохо и ай-я-яй".
4. защитить текст скрипта каким-нибудь криптором, а лучше криптором-обфускатором

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

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

В итоге задача взять чужой скрипт и использовать у себя усложняется до уровня, когда проще скрипт написать заново, что нам собственно и нужно.

Если не хочется заниматься реализацией этой схемы самому, есть готовые платные решения, например вот. И более-менее нормальная защита и привязка к домену в одном флаконе.

MallSerg 20.10.2015 22:12

Просто гениальная защита так много продуманных действий xD.

Да как не исправляй свое сообщение все равно это глупость ).

+function (){
	var window = {location:"KakoyUgodnoDomen.com"};
	alert (window.location)
}();

alextwin 22.10.2015 00:52

MallSerg, если хочеться съехидничать, то желательно сначала подумать, а то можно самому попасть в глупое положение .)

Допустим переопределил ты window столь незамысловатым образом и что? В реальном скрипте код ниже 2-й строчки даст ошибку при первом обращении к свойству или методу window кроме location.
function (){
    var window = {location:"KakoyUgodnoDomen.com"};
    var x=window.open();   //будет ошибка
    var d=window.document.write("и здесь ошибка тоже");
    alert(window.location)
}();

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

MallSerg 25.10.2015 13:26

Ну если бы ты хоть немного знал бы JS то понимал бы что вся твоя защита обходится парой строк и не вызывает трудностей даже для начинающих кодеров =)

<script>var glob = window;
+function f (){
    var window = {location:"KakoyUgodnoDomen.com",__proto__:glob};
    //var x=window.open();   //будет ошибка
    var d=window.document.write("и здесь ошибка тоже");
    alert (window.location);
}();</script>


И, да. Я хочу съехидничать xD.

Sigizmund2012 25.10.2015 18:45

MallSerg,
Он просто пиарит свой сраный обфускатор, посты его посмотри.

viktorina 26.10.2015 13:06

Задача интересная.
Нужно сделать несколько проверок в нескольких местах.
Нужно устанавливать класс для body и нескольких других каркасообразующих элементов. Устанавливать его через js, чтобы в случае удаления ваших скриптов ломался и сайт.
Весь js нужно шифровать, компрессировать.
Заморачиваться не стоит над мелочами и "суперзащитой".
Вероятность того, что сайт скопируют очень мала.
Вероятность того, что сайт скопируют и будут возиться с выпиливанием ваших защит ещё меньше.

alextwin 26.10.2015 13:41

О виликий гуру MallSerg, наконец ты (со второй попытки) написал пример сферического "взлома защиты", который не рушит весь нижележайший код )
Но хочу заметить, что добавление одного маленького слова "this." перед window тут же лишает все твои движения мысли по "взлому" ожидаемого тобой эффекта.

<script>
var glob = window;
(function f(){
    var window = {location:"KakoyUgodnoDomen.com",__proto__:glob};
    //
    alert(this.window.location);
    //
})();
</script>


Эй, юноша Sigizmund2012, побольше уважения в голосе. Ты пока принес в этот топик полезных идей в колличестве ровно ноль, в отличии от MallSerg, который хоть и в своеобразной форме, но пытается дать конструктивную критику концепции защиты о которой спрашивал ТС.

krasovsky 26.10.2015 13:43

Цитата:

Сообщение от рони
то есть вы предполагаите что тот, кто возьмёт ваш скрипт, не сможет убрать проверку на адрес сайта? вам много раз сказали что бесполезно, нельзя, почему вы так упорно возвращаитесь к этой теме?

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

alextwin 26.10.2015 13:50

viktorina, полностью согласен.
"Суперзащита" тут конечно невозможна, при должном уровне старания и времени взломать можно все. Цель не в этом. Цель сделать процесс снятия защит затратнее, чем написание нужного кода заново. Так что применение обфусцированного кода, в который убирается часть логики сайта из основных скриптов, тут самое разумное решение.


Часовой пояс GMT +3, время: 18:18.