Являются ли пользовательские скрипты Chrome отделенными от глобального пространства имен, например скриптами Greasemonkey?

Я знаю, что сценарии Greasemonkey - это , автоматически завернутые в анонимные функции изолированы каким-то образом, чтобы предотвратить их конфликты со сценариями на странице.

То же самое происходит с пользовательскими скриптами Chrome?

Ответ 1

Да, сценарии Greasemonkey обычно завернуты в анонимную функцию. И, Скрипты пользователей Chrome, видимо, тоже.

Но, что более важно, сценарии Greasemonkey обычно 1 завернутые в XPCNativeWrapper, в то время как Google Chrome преобразует имена пользователей в расширения и они работают на арене, которую Google называет "изолированным миром" 2.

Таким образом, вам не нужно обертывать ваш код script в анонимные функции для целей безопасности, они уже защищены.

Просто будьте осторожны:

  • Если вы вводите код непосредственно на страницу (создайте тег <script>), тогда этот код можно увидеть на странице JS.
  • Если вы используете unsafeWindow, страница может теоретически следовать за ним и получать слегка повышенные привилегии.

Риск очень низок, и я не смог найти каких-либо задокументированных эксплойтов в дикой природе.

~~~
Итог, сценарии изолированы в разной степени в обоих браузерах. (И не только путем обертывания анонимными функциями.)

Greasemonkey имеет отличный набор привилегированных функций в Firefox. Хотя пользовательские скрипты в Chrome гораздо более ограничены.

Однако большая часть функций GM восстановлена ​​в Chrome с помощью расширения Tampermonkey.




1 Как Greasemonkey версии 1.0 (24 августа 2012 г.), песочница управляется директива @grant. Если script работает с (или по умолчанию) @grant none, тогда песочница не используется. script работает только в частной области, а обычные GM_ функции API не будут работать.

2 Разве это не так громче, чем какая-то скверная песочница? (^ _ ^)

.