TWebBrowser: отключить все ограничения безопасности

Я использую компонент TWebBrowser в Delphi 10.2, который импортируется из библиотеки типов SHDocVW_TLB.

Я хочу использовать этот веб-браузер для просмотра локальных файлов и файлов в доверенной среде. Но я заметил, что вызов AJAX из локального файла (точнее: пользовательский контент HTML, который я загрузил в компонент браузера с использованием этого кода) в LAN или WAN невозможен из-за ограничений безопасности.

Моя цель - отключить все ограничения безопасности (я знаю о рисках) для этого элемента управления веб-браузера.

Не уверен, есть ли другие способы, но я думаю, что я должен создать собственный IInternetSecurityManager. Во время моего исследования я нашел этот документ Microsoft, и он объясняет, как написать такой SecurityManager. Но нигде я не могу найти, как "вставить / перезаписать" этот пользовательский IInternetSecurityManager в мой элемент управления TWebBrowser.

Что мне нужно сделать, чтобы полностью отключить все ограничения безопасности? Спасибо за любую подсказку!

1 ответ

Ответ содержится в той же документации MSHTML, на которую вы ссылались в своем вопросе:

Приложения, размещающие элемент управления WebBrowser или MSHTML

Узлы управления WebBrowser или MSHTML могут создать менеджер безопасности (путем реализации IInternetSecurityManager интерфейс), который обрабатывает действия и политики URL, которые важны для хоста. Другие действия и политики URL-адреса будут переданы диспетчеру безопасности по умолчанию, чтобы он мог обрабатывать их соответствующим образом. IInternetSecurityMgrSite Интерфейс будет использоваться для обработки связанной с Windows информации из компонента, чтобы настраиваемый менеджер безопасности мог обрабатывать любой требуемый пользовательский интерфейс.

Чтобы создать настраиваемый менеджер безопасности, компонент должен реализовать IInternetSecurityManager интерфейс Любые методы или действия URL, для которых настроенному менеджеру безопасности нужен менеджер безопасности по умолчанию, должен возвращаться INET_E_DEFAULT_ACTION,

Предупреждение о безопасности: внедрение IInternetSecurityManager неправильные методы могут поставить под угрозу безопасность вашего приложения. Любые методы или действия URL, для которых настроенному менеджеру безопасности нужен менеджер безопасности по умолчанию, должен возвращаться INET_E_DEFAULT_ACTION, Если метод не переопределяет поведение по умолчанию и возвращает HRESULT, указывающий на успех, действие не обрабатывается и может подвергнуть пользователей риску атаки с повышением привилегий. Перед продолжением ознакомьтесь с разделом "Вопросы безопасности: API зон безопасности URL".

Компонент должен также реализовать объект, который поддерживает IOleClientSite интерфейс при встраивании элемента управления WebBrowser или MSHTML.

Следующие шаги выполняются для действия URL.

  1. MSHTML использует CoCreateInstance создать экземпляр Internet Security Manager.

  2. Internet Security Manager вызывает QueryInterface метод на MSHTML, чтобы получить его IServiceProvider интерфейс. MSHTML затем вызывает QueryInterface метод на IOleClientSite интерфейс, чтобы получить IServiceProvider интерфейс

  3. IServiceProvider::QueryService призван получить IInternetSecurityManager интерфейс Затем компонент передает указатель на свою реализацию IInternetSecurityManager в диспетчер интернет-безопасности.

  4. Звонки из MSHTML на IInternetSecurityManager методы передаются в пользовательский менеджер безопасности из Internet Security Manager по умолчанию.

  5. Если вызванный метод возвращает INET_E_DEFAULT_ACTION реализация по умолчанию IInternetSecurityManager используется для разрешения звонка. В противном случае возвращается результат из настраиваемого менеджера безопасности.

  6. Internet Security Manager возвращает результат обратно в MSHTML.

Итак, сначала вам нужно написать класс, который реализует IInternetSecurityManager интерфейс.

Во-вторых, к счастью TOleControl (который TWebBrowser вытекает из) осуществила IOleClientSite а также IServiceProvider интерфейсы начиная с Delphi 2006, так что все, что вам нужно сделать, это назначить обработчик для его общедоступного ServiceQuery событие, и когда MSHTML вызывает IServiceProvider.QueryService() находясь в поиске IInternetSecurityManager, вы можете вернуть экземпляр вашего собственного класса менеджера безопасности.

Для более старых версий Delphi вы можете указать IOleClientSite Возражать TWebBrowser по запросу его DefaultInterface собственность для IOleObject интерфейс, а затем вызвать IOleObject.SetClientSite()метод. Пример этого демонстрируется в следующей статье:

Как настроить пользовательский интерфейс TWebBrowser (часть 3 из 6)

обеспечение TWebBrowser с обычаем IOleClientSite как вы можете предоставить свой собственный IDocHostUIHandler, IDocHostUIHandler2, IDocHostShowUI, а также ICustomDoc объекты в MSHTML (MSHTML не запрашивает их, используя IServiceProvider, поэтому они не будут вызывать TWebBrowser.ServiceQuery событие). Эти интерфейсы являются корнем большинства параметров настройки WebBrowser, как описано в MSDN:

Механизм настройки элемента управления WebBrowser предназначен для автоматизации, когда контейнер обеспечивает поддержку элементов управления ActiveX. Всякий раз, когда создается экземпляр элемента управления WebBrowser, он пытается найти IDocHostUIHandler , IDocHostUIHandler2 а также IDocHostShowUI реализации от хоста, если они доступны. Элемент управления WebBrowser делает это QueryInterface позвонить на хосте IOleClientSite интерфейс

Эта архитектура работает автоматически для приложения, которое реализует IOleClientSite интерфейс и проходит IOleClientSite указатель на элемент управления WebBrowser через браузер IOleObject::SetClientSite метод.

Другие вопросы по тегам