Мой вопрос вроде двоякий. Сначала , как работает модель песочницы, как она влияет на сценарий пользователя, что доступно / просматривается с точки зрения веб-страницы и сценария пользователя, и если использование другой модели песочницы влияет на страницу, способную заметить ваш сценарийвводится на страницу (или нет). Второй , как скрипты внедряются в страницу, и может ли страница обнаружить это?
Первый
Из того, что я вижу, когда выиспользуйте @grant none
, песочница отключена, и у вас будет доступ к веб-странице и ее javascript.Если вы вносите какие-либо изменения в javascript и / или DOM, это возможно обнаруживается по странице.
Насколько я понимаю, если вы используете @grant unsafeWindow
, ваш скрипт будет изолирован в своем собственном контексте js, что угодноВы делаете, чтобы window
НЕ был виден веб-страницей, НО вы можете получить доступ к веб-странице и javascript через unsafeWindow
.У вас будет регулярный доступ к DOM, например, document
возвращает документ обычной страницы, а не вам нужно сказать unsafeWindow.document
.Очевидно, что любые изменения, внесенные вами в контекст DOM или страницы js (например, unsafeWindow.foo = 'bar';
), все равно будут обнаруживаться.Причина этого unsafe
не в том, что он обнаружен или нет, а в том, что вы потенциально можете предоставить ненадежной странице доступ к привилегированным функциям GM_*
в этом режиме (которые не предоставляются в обычном режиме, что означает, что@grant GM_*
для любой функции изолирует контекст js, и вы потеряете доступ к контексту js страницы, если вы не @grant unsafeWindow
)
Второй
Какскрипты впрыскиваются на страницу?Возможно ли, что веб-страница может заметить инъекцию usercript (при условии, что скрипт user НИЧЕГО не изменяет на странице).
Например, , если скрипт был внедрен с использованием тега script
, я думаю, что страница могла заметить внедрение скрипта, даже взглянуть на его код?
Играет ли модель песочницы какую-либо роль в том, как это происходит, и делает ее "более безопасной", чтобы ее не видели?Например, если контексты js изолированы, если вы используете @grant unsafeWindow
, то, возможно, js на веб-странице даже не увидит никакого события загрузки пользовательского скрипта, что делает @grant unsafeWindow
существенно более безопасным, если вы не измените DOM или unsafeWindow
конечно.
Я также предполагаю, что нет утечки специальных функций, объектов, свойств и т. д. (например, GM_info
на веб-страницу, которая выдала бы существование tampermonkey?).Ни в режиме @grant none
, ни в режиме @grant unsafeWindow
(при условии, что вы ничего не пропустили на страницу)
Это позволяет мне чувствовать, что unsafeWindow
на самом деле безопаснее с точки зрения того, что его не обнаруживают (потому что jsконтексты изолированы), пока вы не изменяете что-либо (и особенно НЕ открывайте привилегированные GM_*
функции для unsafeWindow). Например, , если вы использовали eventListener в режиме @grant none
, он может быть обнаружен, но если вы используете его в режиме @grant unsafeWindow
, он может не быть обнаружен из-за изоляции?Кроме того, если бы страница могла обнаружить загрузку пользовательского скрипта (я не знаю, возможно ли это на самом деле), она не знала бы, изолированные ли контексты js
В кратком изложении, может ли страница обнаружить существование вашего пользовательского скрипта или тампона, если вы его не предадите?
Являются ли какие-либо из моих вышеупомянутых мыслей неверными в каких-либоплощадь, и если да, то как это на самом деле работает?
Обновление
Небольшая информация для уточнения:
Пользовательский скрипт только пассивно считывает информацию со страницы (возможно, используя MutationObserver). Он ничего не изменяет, не использует библиотеки js (ни из скрипта пользователя, ни с веб-страницы), ни по вызовам ajax, ни по узлам скрипта, ни по определению, ни по щелчкам и т. Д. Скрипт МОЖЕТ прочитать некоторую информацию из JS-переменных страницы (предположим, что эти переменные и функции не заминированы), а также с помощью WebSocket (внутренняя служба). Использование IIFE тоже. Таким образом, вопрос, в основном, заключается в том, можно ли обнаружить tampermonkey сам по себе (и если он запускает скрипт страницы)?
В этом ответе: https://stackoverflow.com/a/8548311
Я могу исключить 1, 4, 5, 6 и 7; вероятно, 2 и 3, но я не знаю, повлияет ли сам по себе тампермонк какой-либо из этих