|
Безопасность клиентского кода.
Правильно ли я понимаю, что всякие браузерные расширения, дополнения и юзер-скрипты имеют полный доступ ко всему клиентскому коду? То есть, например, можно заменить метод 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, время: 08:11. |
|