Представьте, что у вас есть API, который встроен через тег <script src=.../>
где-то на странице.
Вам необходимо использовать некоторые из API-интерфейсов браузера - от new Function
и Object.keys
до subtle
, Blob
, WebWorker
, WASM
и т. Д. Вы должны убедиться, что он не включен в Прокси-сервер, замененный некоторым ранее включенным lib или поддельный вредоносным плагином браузера или ОС.
Могут быть использованы следующие соображения:
скрипт включен неанонимным способом
вы можете полностью управлять запросом / ответом, включая использование файлов cookie, манипулирование заголовками и т. Д.
вы можете заставить разработчиков включать некоторый сгенерированный сервером код на свою сторону (и обычно делать все, что угодно, если это не нарушает их веб-сайт)
вставленный плагином код может быть загружен и выполнен перед любым другим кодом на странице
и embedder, и ваш сайт работают по протоколу HTTPS
нигде не происходит атака MitM, включая ОС конечного пользователя. Это значит
без мошенничества сертификат HTTPS
нет промежуточных запросов / ответов
плагины в браузере могут манипулировать заголовками запроса / ответа (не тела!), Но не могут изменять логику некоторых заголовков, включая CSP, что означает, что по крайней мере код будет загружен надлежащим образом. Понятия не имею почему, но так работает Chrome (и это очень хорошо!)
Я ожидаю, что решения будут работать в последних версиях Edge, Chrome, FF.
Вещи, которые я знаю:
Вы можете получить доступ к Function, Boolean, Number, Array, Object и т. Д. Через получение конструкторов значений
вы можете получить доступ к окну через (function () {return this}). Call (null)
вы не можете переписать / переопределить документ, происхождение, местоположение, свойства домена окна - это приведет к перезагрузке страницы
если вы сможете каким-либо образом получить доступ к Blob и URL.createObjectURL, вы сможете протестировать элементы WebWorker / iFrame
Контекст WebWorker / SharedWorker является безопасным (поскольку его невозможно удалить), поэтому, если вы можете порождать Worker, вы можете использовать все, что WorkerNavigator предоставляет вам
вы можете создать WebWorker из URI данных (data :), который является доверенным (но мы все еще не можем получить безопасный доступ к объекту Worker); в нем можно создать BLOB-объект, который будет представлять собой BLOB-объект: null /% uuid%, и этот BLOB-объект можно открывать где угодно (вместо политики одного и того же домена с одним и тем же источником). Не знаю, чем это может быть полезно, но это интересное открытие.
вы можете проверить WebWorker на соответствие политике безопасности контента. Это то, что страница не знает, так что вы можете разрешить только ограниченный CSP worker-src. Если это работает, это работает и отвечает, иначе вы не можете просто получить ответ. Это не может помочь в проверке глобального объекта Worker, однако вы можете получить доверенный URI BLOB-объекта (если для проверки подлинности используются дополнительные средства шифрования)