Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.10.2012, 17:17
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Безопасность клиентского кода.
Правильно ли я понимаю, что всякие браузерные расширения, дополнения и юзер-скрипты имеют полный доступ ко всему клиентскому коду? То есть, например, можно заменить метод XMLHttpRequest.prototype.send и совершенно прозрачно случать запросы?
Хотелось бы узнать, как с этим делом обстоит у разнах браузеров?
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2012, 17:35
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

и даже скрипты подгружаемые с другого сайта
одинаково
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2012, 17:47
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Причем сначала выполняется код расширений, а затем код страницы, так?
Ответить с цитированием
  #4 (permalink)  
Старый 28.10.2012, 17:52
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

незадумывался никогда.

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

Думаю отличить нативную функция от скиптовой труда не составит.
alert(alert);
alert(  function(){alert(100) });

var x=function(){alert(100)};

alert(x.toString().length);

if ( test(x,23) ) alert ('функцию подменили');
else alert('функция в порядке');

var x=function(){alert(100500)};

if ( test(x,23) ) alert ('функцию подменили');
else alert('функция в порядке');


function test(f,c){
    return f.toString().length!=c;
}
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 28.10.2012 в 18:00.
Ответить с цитированием
  #5 (permalink)  
Старый 28.10.2012, 18:01
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от BallsShaped
Причем сначала выполняется код расширений, а затем код страницы, так?
ну и если так -ничего не помешает запустить вредоносный через таймаут
Ответить с цитированием
  #6 (permalink)  
Старый 28.10.2012, 18:26
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Сообщение от dmitriymar
ну и если так -ничего не помешает запустить вредоносный через таймаут
Так нет, меня как раз волнует, что можно изменить нативные методы перед выполнением страницы.
Сообщение от DjDiablo
Думаю отличить нативную функция от скиптовой труда не составит.
Наивный:
var replaceNativeFunction = new function (){
  var functionList = [],
      originalList = [];

  function replaceNativeFunction( object, methodName, newMethod ){
    functionList.push( newMethod );
    originalList.push( object[ methodName ] );
    object[ methodName ] = newMethod;
  };

  replaceNativeFunction.getOriginal = function ( method ){
    var index = functionList.indexOf( method );
    return originalList[ index ];
  };

  replaceNativeFunction( Function.prototype, "toString", function ToString(){
      if( this.toString == ToString )
        return replaceNativeFunction.getOriginal( ToString ).call( replaceNativeFunction.getOriginal( this ) );
      return this.toString();
    } ); 

  return replaceNativeFunction;    
};

replaceNativeFunction( window, "alert", function newAlert( message ){
  var originalAlert = replaceNativeFunction.getOriginal( newAlert );
  originalAlert( message );
  originalAlert( "Trololo!!!" );
} );

alert( alert.toString() );

Последний раз редактировалось BallsShaped, 28.10.2012 в 20:23.
Ответить с цитированием
  #7 (permalink)  
Старый 28.10.2012, 18:27
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от DjDiablo
Думаю отличить нативную функция от скиптовой труда не составит.
тока ты забываешь что в разных браузерах разная длинна, например у меня в опере 22 символа а не 23. Да и это обойти не составит труда:
var x=function(){alert(100)};

var old=x, x=function(){alert(100500)};
x.toString = function() {
    return old.toString();
}

alert( x.toString() );
x();
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 28.10.2012, 18:32
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

есть идеи лучше ?
и кстатии devote

var x=function(){alert(100)};

var old=x, x=function(){alert(100500)};
x.toString = function() {
    return old.toString();
}
alert( x.toString );
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 28.10.2012 в 18:42.
Ответить с цитированием
  #9 (permalink)  
Старый 28.10.2012, 18:41
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Навскидку все встроенные функции приводятся к строке вида
function send() {
    [native code]
}

С точностью до пробела, и возможно имени функции.
Проверяйте так.
Только используйте встроенный в Object метод toString
Хотя и его могут подменить

Но в случае подмены скрипта плагином, вы все равно навряд ли где-то найдете оригинальную функцию
Ответить с цитированием
  #10 (permalink)  
Старый 28.10.2012, 20:23
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Gvozd
С точностью до пробела
не согласен, опера например делает в одну строку, ИЕ тоже делает иначе.. да и вообще все браузеры по разному.

Сообщение от DjDiablo
и кстатии devote
кто же спорит, но обойти это не проблема в любом случае, и проверка через toString бредовая идея
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрыть из исходного кода часть javascript кода. javasc Javascript под браузер 10 12.03.2014 09:32
Рег.выражения, подсветка кода lynch1 Events/DOM/Window 6 17.12.2012 20:04
Пример кода сохранения в базу html страницы генерированного посредством JavaScripts wayzer Серверные языки и технологии 2 06.09.2012 16:46
TabPanel загрузка кода с сервера Jevgeny ExtJS 5 07.12.2010 15:35
Добавление методов к стандартным объектам и совместимость кода Василий Б. Общие вопросы Javascript 10 20.07.2010 12:00