|
Безопасность клиентского кода.
Правильно ли я понимаю, что всякие браузерные расширения, дополнения и юзер-скрипты имеют полный доступ ко всему клиентскому коду? То есть, например, можно заменить метод XMLHttpRequest.prototype.send и совершенно прозрачно случать запросы?
Хотелось бы узнать, как с этим делом обстоит у разнах браузеров? |
и даже скрипты подгружаемые с другого сайта
одинаково |
Причем сначала выполняется код расширений, а затем код страницы, так?
|
незадумывался никогда.
но если сначало отрабатывает код расширений, то думаю скрипт мог бы проверить интерисубщие его обьекты на безопасность. Думаю отличить нативную функция от скиптовой труда не составит.
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;
}
|
Цитата:
|
Цитата:
Цитата:
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() );
|
Цитата:
var x=function(){alert(100)};
var old=x, x=function(){alert(100500)};
x.toString = function() {
return old.toString();
}
alert( x.toString() );
x();
|
есть идеи лучше ?
и кстатии devote
var x=function(){alert(100)};
var old=x, x=function(){alert(100500)};
x.toString = function() {
return old.toString();
}
alert( x.toString );
|
Навскидку все встроенные функции приводятся к строке вида
function send() {
[native code]
}
С точностью до пробела, и возможно имени функции. Проверяйте так. Только используйте встроенный в Object метод toString Хотя и его могут подменить Но в случае подмены скрипта плагином, вы все равно навряд ли где-то найдете оригинальную функцию |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 16:26. |
|