Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: API
Войти
Регистрация
Восстановить пароль
 
mrjazz
0 / 0 / 1
Регистрация: 20.03.2014
Сообщений: 17
1

"Как я в chrome нашел цыганские корни" ИЛИ "Влез в Chrome extensions? -Пойди умойся."

08.12.2017, 14:40. Просмотров 346. Ответов 8
Метки нет (Все метки)

Все началось с попытки перехватить console.log
Данная затея очень просто реализуется через консоль разработчика:
Javascript
1
2
3
4
5
6
7
8
9
10
11
var console_log_hook_temp=console.log;
    
    function console_hook(msg) {
        console_log_hook_temp("BEGIN");
        console_log_hook_temp(msg);
        console_log_hook_temp("END");
    };
 
console.log=console_hook;
 
console.log("hook created");
Так же можно перехватывать лог из фреймов. (iframe.contentWindow.console.log)

Но когда дело доходит до автоматизации процесса перехвата консоли посредством расширений - chrome начинает бросаться камнями в невинного разработчика.

Во первых если во фрейме будет подгруженный фрейм с другого домена, то получить к нему доступ так
Javascript
1
document.getElementsByTagName("iframe")[0].contentDocument.getElementsByTagName("iframe")[0]
уже не получится.
Почему? -потому, что разработчики chrome ничего лучше не придумали, чем искусственно мешать перемещениям по DOM.
Благо, эта проблема решается запуском оного с ключом: " chromium-browser --disable-web-security --user-data-dir "

Поехали дальше...
Допустим где-то на странице подгружается следующий код:
HTML5
1
2
3
4
5
6
7
8
9
........
 
<script>
function very_important() {
//do something important
}
</script>
 
........
Выполняем в консоли "window.very_important()". Все ОК.

А теперь делаем тоже самое но из content.js расширения
Javascript
1
setTimeout(function () {window.eval('window.very_important()');},1000);
timeout здесь для того, чтобы страница успела загрузится и функция объявилась.
А window.eval для того, чтобы не возникало сомнений, что мы начинаем искать very_important только по истечению одной секунды и в контексте конкретного окна. (Можно обойтись и без eval, те "function () {window.very_important()}", но для наглядности я оставил так)

И знаете, что получилось? - Ничего. - js не нашел функции very_important !
- chrome, что с тобой не так?

Дальше пошли эксперименты:
Javascript
1
setTimeout(function () {window.eval('console.log(window)');},1000);
Через секунду получил в консоль объект окна и после этого выполнил прямо в консоли "console.log(window)" (думал, может в расширении не то окно?)
Вывод был примерно такой
Javascript
1
2
3
Window {frames: Window, postMessage: Ж’, blur: Ж’, focus: Ж’, close: Ж’,*}
console.log(window)
Window {frames: Window, postMessage: Ж’, blur: Ж’, focus: Ж’, close: Ж’,*}
После этого сравнил оба этих объекта, и увидел, что, как минимум document, а с ним и DOM у данных окон одинаковые (значит в extension правильное окно).
Но нужной функции в объекте, который вернуло расширение не хватает! Это как???
Цыганский chrome обворовал функции window у расширения???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2017, 14:40
Ответы с готовыми решениями:

"chrome.storage.sync.get" внутри страницы
Сделал инъекцию на страницу которая должна сохранять/загружать информацию. С сохранением все в...

History API + jQuery кнопки "назад" и "вперед"
Добрый день. Мне нужно при нажатии на кнопку назад или вперед, перейти в соответствующее место. Не...

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...

Получить значение из {"text1":"val1","text2":"val2","text3":{"text":"val"}}
Есть такая строка var my = '{&quot;text1&quot;:&quot;val1&quot;,&quot;text2&quot;:&quot;val2&quot;,&quot;text3&quot;:{&quot;text&quot;:&quot;val&quot;}}'; Как из...

Создать программу такую, что пользователь вводит число, а мы ему выдаём "-лет" или "-год" "-года"
4)Создать программу такую, что пользователь вводит число, а мы ему выдаём &quot;-лет&quot; или &quot;-год&quot; &quot;-года&quot;.

8
shaman92
28 / 28 / 10
Регистрация: 04.06.2014
Сообщений: 186
08.12.2017, 16:11 2
Цитата Сообщение от mrjazz Посмотреть сообщение
Во первых если во фрейме будет подгруженный фрейм с другого домена, то получить к нему доступ так ... Уже не получится
Это нормальное поведение, политика безопасности. Вносить изменения в клиент другого домена запрещено. Так ведёт себя не только хром
"Если одно окно попытается обратиться к другому, то браузер проверит, из одного ли они источника. Если нет – доступ будет запрещён."
0
mrjazz
0 / 0 / 1
Регистрация: 20.03.2014
Сообщений: 17
08.12.2017, 17:28  [ТС] 3
Проблема в том, что такая реализация крайне непрозрачна.
И пускай бы оно даже так работало, но черт побери - Неужели та тяжело сообщать о всех случаях конфликта с "политикой"???
Почему лог конфликтов реализован только частично?
О том, что при обращении к окну из расширения хром порезал пол объекта, разве не надо сообщать?
В хроме это происходит тихо.

Дело в том, что расширения человек устанавливает по своему желанию, и с осознанием, что он делает.
Что небезопасного в том, чтобы расширение могло вызывать методы из сайта? Почему не оставили возможности отключить данную сверхопеку?

Добавлено через 36 минут
Получается, что хром защищает страницу от расширений. Хотя, как по мне, надо наоборот.
0
j2FunOnly
Модератор
858 / 816 / 481
Регистрация: 05.06.2015
Сообщений: 1,895
08.12.2017, 22:47 4
Цитата Сообщение от mrjazz Посмотреть сообщение
Хотя, как по мне, надо наоборот.
Я бы не хотел чтобы какой-нибудь адблок тырил мои логины/пароли от клиент-банков. Расширение не может прямо взаимодействовать со страницей, и это правильно. Поэтому миллионы пользователей доверяют браузерам от Google и Mozilla - они обеспечивают безопасность (я хочу в это верить ) CORS, XSRF, etc придумали не для того чтобы ставить палки в колёса разработчикам.

Цитата Сообщение от mrjazz Посмотреть сообщение
Неужели та тяжело сообщать о всех случаях конфликта с "политикой"
вы, к.м.к. прочитали один туториал по созданию расширения и возомнили себя крутым разработчиком, есть доки, референсы где всё описано - что можно, что нельзя, какие возможности у вас есть, что вы никогда не сможете сделать и т.д. и т.п. вы хоть раз читали это например https://developer.chrome.com/extensions/content_scripts ?

Добавлено через 5 минут
И надо же какой опус написали, перешлите это в OWASP - пусть чуваки расходятся, ничего-то они не шарят.
0
mrjazz
0 / 0 / 1
Регистрация: 20.03.2014
Сообщений: 17
09.12.2017, 00:58  [ТС] 5
Я бы не хотел чтобы какой-нибудь адблок тырил мои логины/пароли от клиент-банков. Расширение не может прямо взаимодействовать со страницей, и это правильно.
Однако же это не решает проблему. И "тырить" пароли можно, если не прямо, то косвенно.

Дело в том, что, как правило, решения, которые базируются на многочисленных слоях политик не дают ожидаемого уровня безопасности и являются неприкрыто-обнаженными костылями.
Зато прирост в сложности настройки и эксплуатацию таких систем ощутим.

Расширение - это ведь как часть браузера. Если человек его устанавливает - значит он ему доверяет. Не зря же у хрома есть свой каталог.
А тут выходит, что мне продают нерабочий пистолет...лишь бы я себе колено не прострелил... Такая сверхзабота "а-ля WINDOWS 10" ни к чему хорошему не приводит и вызывает гораздо больше подозрений в сторону разработчиков.
ИМХО
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
11.12.2017, 09:46 6
Цитата Сообщение от mrjazz Посмотреть сообщение
Дело в том, что, как правило, решения, которые базируются на многочисленных слоях политик не дают ожидаемого уровня безопасности и являются неприкрыто-обнаженными костылями.
Весьма громкое заявление. А пруфы?
0
cyber_eagle
2 / 2 / 3
Регистрация: 27.11.2014
Сообщений: 17
11.12.2017, 13:21 7
Днями наткнулся на статью.
Человек верит, что ограничение директорий, с которых он может запускать приложения добавит плюсик к безопасности???
0
diadiavova
3762 / 1317 / 414
Регистрация: 11.04.2015
Сообщений: 2,458
Записей в блоге: 35
12.01.2018, 10:09 8
Цитата Сообщение от mrjazz Посмотреть сообщение
А теперь делаем тоже самое но из content.js расширения
Цитата Сообщение от mrjazz Посмотреть сообщение
И знаете, что получилось?
Догадываюсь. В документации об этом написано. Content Scripts - Google Chrome.
Content scripts execute in a special environment called an isolated world. They have access to the DOM of the page they are injected into, but not to any JavaScript variables or functions created by the page. It looks to each content script as if there is no other JavaScript executing on the page it is running on. The same is true in reverse: JavaScript running on the page cannot call any functions or access any variables defined by content scripts.
Также, если прочитать до конца, то можно узнать и о причинах такого поведения и о способах решения проблемы.
0
cyber_eagle
2 / 2 / 3
Регистрация: 27.11.2014
Сообщений: 17
12.01.2018, 21:44 9
diadiavova, Называется же "CONTENT script" - значит если человек его использует - он отдает себе отчет в том, что может произойти, если будет конфликт с окружением скриптов на странице... А для изоляции есть background...

Где те времена, когда программисты были ответственными?? - протнешь карту не там, где нужно - и переделывай все заново...
А сейчас пошла молодежь - привыкли, что им слюни вытирают, не пускают туда, где не нужно...
Вот и получили - тряпочные кодеры не отвечающие за свои действия вместе со своими "заботливыми" языкамиП.

Добавлено через 5 минут
Я даже больше скажу - это происходит не только с программистами:
Виндовз уже не спрашивает стоит ли обновлять систему - он ставит перед фактом (скоро даже этого не будет)
Скайп лучше отправителя знает, в каком разрешении нужно отправлят картинку, и сжимает ее на свое усмотрение

Садишся за винду, и понимаешь, что ты уже не главный...
0
12.01.2018, 21:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2018, 21:44

Как убрать кнопки "Minimize" и "Maximize", "Close" в заголовке окна?
КАК УБРАТЬ КНОПОЧКИ 'Minimize' и 'Maximize', 'Close' в заголовке окна (чтобы не было крестика в...

подскажите на чем лучше(и проще) реализовать подобие "эквалайзера" - "микшерного пульта" или как это еще назвать
Реально ли создать подобное на базе html? p.s. картинка прилогаеться

Создание браузерной CAD, "math scetchpad", "Geogebra", "Живая геометрия""
Создаю браузерную версию CAD системы, для обучения школьников стереометрии и планиметрии, что-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru