28.10.2012, 17:17
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 162
|
|
Безопасность клиентского кода.
Правильно ли я понимаю, что всякие браузерные расширения, дополнения и юзер-скрипты имеют полный доступ ко всему клиентскому коду? То есть, например, можно заменить метод XMLHttpRequest.prototype.send и совершенно прозрачно случать запросы?
Хотелось бы узнать, как с этим делом обстоит у разнах браузеров?
|
|
28.10.2012, 17:35
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
и даже скрипты подгружаемые с другого сайта
одинаково
|
|
28.10.2012, 17:47
|
Профессор
|
|
Регистрация: 14.09.2012
Сообщений: 162
|
|
Причем сначала выполняется код расширений, а затем код страницы, так?
|
|
28.10.2012, 17:52
|
Профессор
|
|
Регистрация: 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.
|
|
28.10.2012, 18:01
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от BallsShaped
|
Причем сначала выполняется код расширений, а затем код страницы, так?
|
ну и если так -ничего не помешает запустить вредоносный через таймаут
|
|
28.10.2012, 18:26
|
Профессор
|
|
Регистрация: 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.
|
|
28.10.2012, 18:27
|
что-то знаю
|
|
Регистрация: 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();
|
|
28.10.2012, 18:32
|
Профессор
|
|
Регистрация: 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.
|
|
28.10.2012, 18:41
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Навскидку все встроенные функции приводятся к строке вида
function send() {
[native code]
}
С точностью до пробела, и возможно имени функции.
Проверяйте так.
Только используйте встроенный в Object метод toString
Хотя и его могут подменить
Но в случае подмены скрипта плагином, вы все равно навряд ли где-то найдете оригинальную функцию
|
|
28.10.2012, 20:23
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Gvozd
|
С точностью до пробела
|
не согласен, опера например делает в одну строку, ИЕ тоже делает иначе.. да и вообще все браузеры по разному.
Сообщение от DjDiablo
|
и кстатии devote
|
кто же спорит, но обойти это не проблема в любом случае, и проверка через toString бредовая идея
|
|
|
|