Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Безопасность скрипта (https://javascript.ru/forum/misc/5356-bezopasnost-skripta.html)

micscr 07.10.2009 16:25

Безопасность скрипта
 
Привет.
Почитал в инете как "скрывать" свой JS код от
подсматривания логики. Самый распространенный совет -
модифицировать в "нечитаемый". Но это все равно не спасение.
Скажите если использовать следующую цепочку будет примерно
нормально?
1) Грузится основной код (классы-прототипы)
2) Страница загрузилась
3) по onload делается Ajax запрос где приходит строка кода
инициализации и ее направляем на eval()
4) финальная работа скрипта

Вот эту строку получить "хакеру-копировщику" легко?

Может другая цепочка.
Спасибо за ответ и за полезную ссылочку.

P.S. Ресурс допустим вообще не подразумевает работы без JS (игры)

ZoNT 07.10.2009 16:45

Цитата:

Сообщение от micscr
Вот эту строку получить "хакеру-копировщику" легко?

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

ZoNT 07.10.2009 16:47

Ну и самое простое - посмотреть запросы в фаербаге :)

Gvozd 07.10.2009 18:39

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

e1f 07.10.2009 18:40

micscr, скрывать код нереально, забудьте об этом

micscr 08.10.2009 09:08

Цитата:

Сообщение от e1f (Сообщение 32069)
micscr, скрывать код нереально, забудьте об этом

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

А то, что тот кто умеет посмотрит - знаю.

Kolyaj 08.10.2009 09:10

YUI Compressor

micscr 10.05.2010 18:48

Хочу скрыть от FireBug глобальную функцию, получаемую аяксом. Делаю так:
var s = 'window.probeg = ' + r;
try {
  eval(s);
} catch(e) {
}
window.probeg.toString = function(){return '';};


В консоли FireBug вроде нормально, т.е. пустую строку alert(window.probeg) покажет. Этого достаточно, или еще как функции можно просматривать?

Сразу скажу, что текст самой функции если смотреть на вкладке сеть (аякс запросы) в FireBug - зашифрован.

Gvozd 10.05.2010 19:12

toSource

micscr 10.05.2010 19:22

Цитата:

Сообщение от Gvozd (Сообщение 54743)
toSource

Так, это прикрыл.

Octane 10.05.2010 19:32

JSON.stringify(probeg)

micscr 10.05.2010 19:42

Цитата:

Сообщение от Octane (Сообщение 54747)
JSON.stringify(probeg)

Это как работает?

Ввожу в консоль alert(JSON.stringify(probeg)) выдает - undefined.

Octane 10.05.2010 19:54

Ну если probeg -- функция, то будет undefined.

Gvozd 10.05.2010 23:47

micscr,
имеет смысл выводить не пустую строку, а кусок обсфуцированного ложного кода

e1f 11.05.2010 03:07

Ммм... А если так?
// Declaration
function hidden_func(){
    console.info("Answer: 42");
}

// Hide me
hidden_func.toString =
hidden_func.toSource = function(){
    return "Go away!"
}

// Nice
alert(hidden_func);
alert(hidden_func.toString());
alert(hidden_func.toSource(1));

// Shit!
alert(Function.prototype.toString.call(hidden_func));
Function.prototype.toSource && alert(Function.prototype.toSource.call(hidden_func, 1));

Gvozd 11.05.2010 03:36

Цитата:

Сообщение от e1f
Ммм... А если так?

ну, в общем-то ясно, что надо менять прототип
например, можно сохранить старый toString и вызывать его не для всех функций не из списка защищаемых, для того чтобы сохранить функциональность старого toString
в ином случае, вообще не заморачиваться
PS а почему вы вызываете toSource с параметром?
ранее такого не видел

Octane 11.05.2010 03:50

http://code.google.com/p/jslibs/wiki...un-minifier%29

e1f 11.05.2010 03:56

Да, как-то так с прототипом и стоит поступить.
PS Чтобы отступы красивые были :) Если уже смотреть сорс, то форматированный, а не как кошка лапой :)

micscr 11.05.2010 08:25

Я смотрю, что лучше всего не использовать в таком случае глобальную функцию, а спрятать например в замыкании?
Данные из замыкания вроде же нельзя так просматривать, т.к. нет извне ссылки никакой ?
Правда ложную ветку в алгоритме придется добавить.

Цитата:

имеет смысл выводить не пустую строку, а кусок обсфуцированного ложного кода
Сори не уточнил. Я сам шифрую текст функции в php по своему алгоритму, а в js уже расшифровываю зеркальной функцией.

p.s. Мотив мучений - не получил недавно последний платеж за работу. Их устроил обфусцированный вариант. Т.е. надо чтобы демка без сервера не работала.

Kolyaj 11.05.2010 09:00

Цитата:

Сообщение от micscr
Их устроил обфусцированный вариант.

Бэкдурчик небольшой, пропущенный через packer, вставляйте в обфусцированный код куда-нибудь в середину, вроде подключения внешнего js-файла. Замучаются вытаскивать.

Gvozd 11.05.2010 10:00

Цитата:

Сообщение от micscr
Мотив мучений - не получил недавно последний платеж за работу

работа через протекцию, или СБС биржи фриланса, и все пучком
если что не так, то арбитражка соответствующей системы и отрицательный отзыв.
как правило многие дорожат своими WMID, и акками на бирже(если конечно это не свежезареганный)
меня за два года "кинули" два раза что-то на 30$
PS а вообще для более-менее сложного проекта дешевле будет получить деобсфуцированный вариант, если захотят кинуть

micscr 11.05.2010 10:29

Та это я диплом человеку писал. Брал поэтапно. Сделал часть, продемонстрировал, он оплатил. Последний этап (15$) - он все потестит, я поисправляю и попрощаемся. Он исчез - а зря, нужно было толковей потестить :) .

Gvozd 11.05.2010 11:07

поэтапная работа не отменяет протекцию


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