Защита javascript от модификации извне
Здравствуйте товарищи разработчики! По долгу службы начальник распорядился заняться доскональным изучением javascript, хотя до этого я работал чисто на написании модулей на php. Когда уже знаешь один язык на второй идти куда проще с вилами. В итоге моего изучения мне было поручено написать расширение для Chrome.
Суть расширения в следующем: К странице www.mydomain.com/test_page подключается js скрипт, который в переменную собирает тело документа (между тегами <body></body>). var test = document.body.innerHTML; Далее AJAX-ом делаем отправку содержимого переменной test на сервер. Посланные на сервер данные обрабатываются и в зависимости от содержания некоторых элементов страницы выдаём AJAX-ом response в расширение пользователю и оповещаем его по конкретной ситуации. Особенности: 1) Сайт с которого будем тянуть "тело" не наш, поэтому и такие костыли с выдиранием контента страницы. Т.е. мы посредники. Пользователь ставящий расширение даёт нам разрешение на граббинг тела страницы. 2) Мог возникнуть логичный вопрос: почему бы не потянуть curl-ом сервером? Но тут логичный ответ - кука защищённая для хоста, т.е. через document.cookie мы не вытянем её. Да и не хорошо воровать куки, всё же личный кабинет. Итого по пунктам 1, 2 всё сводится к граббингу тела документа с разрешения пользователя (= установка расширения). Теперь вопрос, который стоял в названии темы. Я долго вчитывал разные мануалы по js, в т.ч. и ваш на сайте learn.javascript.ru, но не нашёл ответа как защитить мой скрипт от модификации пользователем. Если к примеру он хочет подать левые данные серверу вместо истинных. Ведь, учитывая, что скрипт отрабатывает на стороне пользователя есть возможность вклинить вместо var test = document.body.innerHTML; какой-нибудь var test = "<div>fake</div>" И уйдёт вместо боди AJAX-ом на сервер этот фейк, а я даже не узнаю был ли модифицирован исходный скрипт, чтобы отвергнуть эти данные и выдать пользователю ошибку через расширение. Вот и итоговый вопрос: есть ли механизм защиты javascript от модификации извне? Или не защиты, а хотя бы оповещения о том, что совершена модификация исходного скрипта? Буду благодарен за дельные ответы. Надеюсь это не такая нерешаемая задача как "защита javascript от копирования". Никогда не любил обработку на стороне пользователя, но по другому никак((( |
2) Мог возникнуть логичный вопрос: почему бы не потянуть curl-ом сервером?
Хреново знаете php, не только с помощью curl можно передать cookie? можно и file_get_contents ... как защитить мой скрипт от модификации пользователем никак Цитата:
Ответ отправляйте с вашим ключом и проверяйте его на валидность ip с которого пришел? время и т.д Ведь средствами php тоже можно генерировать js легко js.php <?php header('Content-type: text/javascript; charset: UTF-8'); ?> alert('This js code'); |
Можно попробовать МИНИФИЦИРОВАТЬ СКРИПТ, ПОТОМ ОБФУСЦИРОВАТЬ, ПОТОМ ОПЯТЬ ОБФУСЦИРОВАТЬ НО ДРУГИМ ОБФУСКАТОРОМ,
Звучит страшно, на работает достаточно надежно =) Если это выглядит сложно, просто ОДИН раз обфусцируйте скрипт, и будет Вам щастье :D Что такое обфускация - найдете в интернете, Хотя можно использовать и вариант написаный сверху Цитата:
|
Спасибо всем за ответы. Начну по порядку:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Токен это хорошо, но решает проблему лишь частично. |
Господа, а что скажите по поводу этого?
Защита объекта от изменения в JavaScript Близко ли к истине? |
Цитата:
поскольку это расширение, а не юзерскрипт, в нем может быть запаковано НЕСКОЛЬКО скриптов Главная идея в том, чтобы один скрипт проверяет md5-хеш другого скрипт, и если он не совпадает - делать какое-то оповещение на сервер http://javascript.ru/php/md5 - функция md5() на JS http://javascript.ru/php/md5_file - функция высчитывания md5() для файлов на JS PS: хотя файл который проверяет можно тоже поменять... явно не вариант... |
Цитата:
Всё же пришёл к выводу, что отлавливать модификацию скрипта нереально. Подмена с другого IP - реально, токенами. Но если хацкер под шкурой пользователя расширения, то получается огромная дырища. |
Ничто не мешает "злому хакеру" вскрыть ваше расширение или сам браузер и слать запросы на сервер вручную. Защита от пользователя на стороне пользователя принципиально невозможна, единственный "вариант" - это когда затраты на реверс-инжиниринг больше возможной прибыли.
|
Цитата:
Почему? Скрипт в любом случае исполняется на клиенте, будь-то обычный скрипт, юзерскрипт или расширение -- по-этому НИКТО не мешает модифицировать скрипт... (про Node.JS я не говорил - он исполняется на сервере :p ) Даже если его минифицировать и обфусцировать - его можно относительно легко привести в нормальный вид, а потом делать что хочешь... Цитата:
var point = { x: 17, y: -5 }; Object.freeze(point); point.x = 25; alert(point.x); это не вариант - опять же, ничего не мешает удалить строку Object.freeze(test); |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 01:55. |