Javascript.RU

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

Сообщение от DjDiablo
есть идеи лучше ?
и кстатии devote
var x=function(){alert(100)};

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

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

Чо ты завёлся, никто и не сомневается что могёш )))

и насчёт бредовых идей ты зря, есть такая штука как гипотеза. И более того с чего ты взял что все зловреды заменяют toString ? Cо временем научатся конечно, но пока им это нафик ненадо

кстатии ещё о гипотезах.
Данные мало украсть их же ещё и отослать нужно,
в связи с этом вопрос: можно ли посчитать количество запросов из браузера ? И если их количество отличается от того которое делает наш скрипт, вывести предупреждение что возможно данные уплыли ??? Сам пока невижу возможности это сделать .
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 28.10.2012 в 21:03.
Ответить с цитированием
  #13 (permalink)  
Старый 28.10.2012, 21:09
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Сообщение от Gvozd
Навскидку все встроенные функции приводятся к строке вида
function send() {
    [native code]
}
насколько помнится по личному опыту в сафари ставиться ещё один пробел, вместо
function send() {
    [native code]
}

function send () {
    [native code]
}
Ответить с цитированием
  #14 (permalink)  
Старый 28.10.2012, 21:38
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от DjDiablo
Чо ты завёлся, никто и не сомневается что могёш )))
кто завелся? чет такого не помню. А вообще я к тому что делать проверку через toString бессмысленно.

Сообщение от DjDiablo
И более того с чего ты взял что все зловреды заменяют toString ?
не понял к чему это?

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

Вот вам защита
function replace_method( context, method, fn ) {

    var old = context[ method ];

    if ( old.toString === Function.prototype.toString ) {
        fn.toString = function() { return old.toString() }
        fn.toString.toString = function() { return old.toString.toString() }
        fn.toString.toString.toString = fn.toString.toString;
    } else {
        fn.toString = old.toString;
    }

    return context[ method ] = fn;
}


// ================ проверка =====================

var x=function(){alert(100)};
x.toString = function() {
    return 'This is my lib method';
}

// ------- меняем метод -------
x = replace_method( window, 'x', function(){
    alert( 100500 );
});
// -------

alert( x.toString );
alert( x.toString.toString );
alert( x.toString.toString.toString );
alert( x.toString.toString.toString.toString );
alert( x.toString.toString.toString.toString.toString );
alert( x.toString.toString.toString.toString.toString.toString );
alert( x );
x();



// -------- второй вариант без пользовательского toString -----------

var y=function(){alert(200)};

// ------- меняем метод -------
y = replace_method( window, 'y', function(){
    alert( 200500 );
});
// -------

alert( y.toString );
alert( y.toString.toString );
alert( y.toString.toString.toString );
alert( y.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString.toString );
alert( y );
y();


// ------- меняем метод -------
replace_method( window, 'alert', (function( org ) {
    return function(){
        org.call( this, ["Привет: "].concat( [].slice.call( arguments ) ) );
    }
})( window.alert ));
// -------

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

Третий концепт.
Я расматриваю это как разминку для ума)

Рассмотрю поэтапам.
передача данных, допустим обьект data
1) функция шифрует data, допустим превращает data в json, и дальше преобразовывает уже текст, допустим заменяет символы числами, а числа записывает задом наперёд. Это неважно сейчас совершенно, главное чтобы преобразования были обратимыми. И в шифровании недолжно быть ключа, просто трансформация текста по какому то алгоритму.

2) Происходит, передача XMLRequest, который переписан каким то плагином, уходит две копии закодированных данных, одна на наш серв, вторая подлому хацкеру.

3) На нашем серве, есть код который получив эту абракодабру, в обратном порядке выполняет действия и получает исходный json.

4) Хацкер получает цифробуквенную кракозябру, отчего произнося множество неприличных слов идёт ковырять шифровалку на наш сайт. Допустим он её расковыряет, и напишет дешифратор. Но если он шпиёнит за многими сайтами, то написать декодер для каждого сайта он не сможет.

Тобиш хацкера это не остановит, но жизнь усложнит адово, мониторить XML запросы у множество сайтов будет плагином просто невозможно. Понятно что для vkontakte или одноклассников решение непобходит.

Для окончательного выноса мозга можно автоматом генирировать новые алгоритмы, каждый день, или персонально для каждой сессии.

Всё вышеописанное совершенно немешает забирать информацию из DOM или юзать куки
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 28.10.2012 в 22:31.
Ответить с цитированием
  #16 (permalink)  
Старый 28.10.2012, 22:39
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

devote, твою "защиту" (в кавычках, потому что в контексте сабжа это скорее нападение) легко выявить, проверив свойсво "toString" у метода.
alert.hasOwnProperty( "toString" ) // должно быть false

Но вроде как уже очевидно, что нативный метод от переделанного никак не отличишь, если переделать Function.prototype.toString.

DjDiablo, дело не в хацкерах. Тут логика понятна: сам расширение поставил - сам дурак. У меня другая проблема: не дать пользователю самому (по его собственному желанию) влезть в логику приложения.
Ответить с цитированием
  #17 (permalink)  
Старый 28.10.2012, 22:47
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от devote
а насчет toString вот небольшой метод, который легко заменит метод и фиг ты узнаешь по toString что это нативный или нет.
а если так попробовать?
// 1. создаём фрейм.
var frame = document.createElement("iframe");

// 2. тырим из него toString
var orig_toString = frame.contentWindow.Function.toString;

// 3. это объект, у которого заменён toString.
var myEvilObj = { toString: function () { return "WHAHAHA"; }  };

// 4. если результаты их действия одинаковы, то никто ничего не заменял.
var isReplaced = orig_toString.call(myEvilObj) !== myEvilObj.toString();

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

Последний раз редактировалось melky, 28.10.2012 в 22:50.
Ответить с цитированием
  #18 (permalink)  
Старый 28.10.2012, 23:13
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

melky, инспектор элементов в firebug позволяет просматривать элементы внутри iframe на другом домене, что как бы намекает, что дополнение исполняется и в iframe.
Ответить с цитированием
  #19 (permalink)  
Старый 28.10.2012, 23:14
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Если отойти от темы скриптов, помешать желанию пользователя, то наверного максимум возможного, это святая троица
обфускация + локальные переменные функции + eval
<script>
codes='(function(){var x=100;alert(x);y=200;})()';
eval (codes);
</script>

И хрен вы сударь из консоли узнаете чему у вас Y равен, или x измените. Кстати никакой скрипт до этих переменных тоже недоберётся.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

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

Вопрос к Т.С как много народа использует ваш сайт?
Сообщение от BallsShaped
что всякие браузерные расширения, дополнения и юзер-скрипты имеют полный доступ ко всему клиентскому коду?
как много народа поставит себе подобный функционал в браузер?

не будет ли в итоге 0.000000000000000000....1% вероятность ,чтоб заморачиватся на этом?
Да и есть другой момент-цель зловредов получить информацию почти во всех случаях, а не изменять методы браузера,и получить информацию помешать вы никак не сможете .
Так что вектор вашего вопроса, как минимум, не верный.

Последний раз редактировалось dmitriymar, 28.10.2012 в 23:46.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрыть из исходного кода часть 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