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

BallsShaped 28.10.2012 23:55

dmitriymar, давайте рассматривать тему, как чисто теоретическую. Если некоторая проблема, пусть сферическая и в вакууме, но которую я хочу решить. Назовем мой интерес чисто академическим:)

BallsShaped 29.10.2012 00:03

DjDiablo, не очень понимаю, причем тут eval, но обфускация и выполнение кода внутри функции - это само собой разумеющееся. Меня больше волнует то, что не скроешь. В частности, святая троица: пользовательский ввод + DOM + запросы.

DjDiablo 29.10.2012 00:09

Кстатии, раз уж внедрённые плагинами скрипты, это всётаки скрипты, то нельзя ли их выпилить со страницы силами javascript'а ?.
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>

    <script>
scr=document.getElementsByTagName('script');
console.log(scr);
//чото делаем с scr[0];
    </script>


  </body>
</html>


eval на отладку влияет. Выяснить где произошла ошибка, или или сделать в отладчике breakpoint, почти нереально.
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
    <script>
     t="alert(1);";
     t+="alert(2);";
     t+="alert(" ;
       eval (t);  
    </script>
  </body>
</html>

melky 29.10.2012 00:11

Цитата:

Сообщение от BallsShaped
melky, инспектор элементов в firebug позволяет просматривать элементы внутри iframe на другом домене, что как бы намекает, что дополнение исполняется и в iframe.

это замечательно, но какое отношение это имеет глобальному объекту новосозданного окна, к которому имеет доступ только код в замыкании?

Цитата:

Сообщение от DjDiablo
Кстатии, раз уж внедрённые плагинами скрипты, это всётаки скрипты, то нельзя ли их выпилить силами со страницы силами javascript'а ?.

но evil-скрипт уже исполнился, каков результат будет от его удаления?

BallsShaped 29.10.2012 00:26

Цитата:

Сообщение от melky
какое отношение это имеет глобальному объекту новосозданного окна, к которому имеет доступ только код в замыкании?

Я не знаю, я просто предположил. Хотя, возможно, это все же решение. Скорее всего, пока фрейм не вставлен в dom, дополнения не исполняются. Проверить это я смогу не раньше, чем завтра.

devote 29.10.2012 01:06

Цитата:

Сообщение от melky
// и так же параноить со всеми методами :)

ну вот, хоть один разумный вариант)))

тока не:
frame.contentWindow.Function.toString
а вот:
frame.contentWindow.Function.prototype.toString

devote 29.10.2012 01:12

Цитата:

Сообщение от BallsShaped
Проверить это я смогу не раньше, чем завтра.

// 1. создаём фрейм.
var frame = document.createElement("iframe");
document.documentElement.appendChild( frame );
 
// 2. тырим из него toString
var Func_toString = frame.contentWindow.Function.prototype.toString; // для проверки функций
var Obj_toString = frame.contentWindow.Object.prototype.toString; // для проверки объектов
 
// 3. это объект, у которого заменён toString.
var myEvilObj = { toString: function () { return "WHAHAHA"; }  };

// 3.1. это функция у которой сменили
var x = function() {}
x.toString = function() { return "lalala" }
 
// 4. если результаты их действия одинаковы, то никто ничего не заменял.
alert( Obj_toString.call(myEvilObj) !== myEvilObj.toString() ); // true - заменили
alert( Func_toString.call(x) !== x.toString() ); // true - заменили


var y = function() {}
alert( Func_toString.call(y) !== y.toString() ); // false - не заменяли

melky 29.10.2012 01:21

Цитата:

Сообщение от devote
ну вот, хоть один разумный вариант)))

тока не:
frame.contentWindow.Function.toString
а вот:
frame.contentWindow.Function.prototype.toString

думал, что же лучше выбрать, но остановился на более коротком варианте

да и какая разница, собственно ? :)

alert(Function.prototype.toString === Function.toString);


Цитата:

Сообщение от devote (Сообщение 212799)
// 1. создаём фрейм.
var frame = document.createElement("iframe");
document.documentElement.appendChild( frame );
 
// 2. тырим из него toString
var Func_toString = frame.contentWindow.Function.prototype.toString; // для проверки функций
var Obj_toString = frame.contentWindow.Object.prototype.toString; // для проверки объектов
 
// 3. это объект, у которого заменён toString.
var myEvilObj = { toString: function () { return "WHAHAHA"; }  };

// 3.1. это функция у которой сменили
var x = function() {}
x.toString = function() { return "lalala" }
 
// 4. если результаты их действия одинаковы, то никто ничего не заменял.
alert( Obj_toString.call(myEvilObj) !== myEvilObj.toString() ); // true - заменили
alert( Func_toString.call(x) !== x.toString() ); // true - заменили


var y = function() {}
alert( Func_toString.call(y) !== y.toString() ); // false - не заменяли

если не изменяет память, нужно дождаться события load у фрейма ... нет? похоже, я уже сплю

devote 29.10.2012 02:07

Цитата:

Сообщение от melky
если не изменяет память, нужно дождаться события load у фрейма

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

devote 29.10.2012 05:14

Цитата:

Сообщение от iMaxmaxmaximus
Тред не читал

а стоило бы, что бы не иметь подобных фраз
Цитата:

Сообщение от iMaxmaxmaximus
безопасность нуливая



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