Delphi TWebBrowser:禁用所有安全限制

Delphi TWebBrowser:禁用所有安全限制,delphi,webbrowser-control,twebbrowser,Delphi,Webbrowser Control,Twebbrowser,我正在使用Delphi10.2中的TWebBrowser组件,它是从SHDocVW_TLB类型库导入的 我想使用此web浏览器浏览本地文件和受信任环境中的文件。但我注意到,由于安全限制,无法从本地文件(更准确地说:我使用自定义HTML内容加载到浏览器组件中)向LAN或WAN调用AJAX 我的目标是禁用此web浏览器控件的所有安全限制(我知道风险) 不确定是否还有其他方法,但我想我必须创建一个自定义IInternetSecurityManager。在我的研究中,我发现了,它解释了如何编写这样一个安

我正在使用Delphi10.2中的TWebBrowser组件,它是从SHDocVW_TLB类型库导入的

我想使用此web浏览器浏览本地文件和受信任环境中的文件。但我注意到,由于安全限制,无法从本地文件(更准确地说:我使用自定义HTML内容加载到浏览器组件中)向LAN或WAN调用AJAX

我的目标是禁用此web浏览器控件的所有安全限制(我知道风险)

不确定是否还有其他方法,但我想我必须创建一个自定义IInternetSecurityManager。在我的研究中,我发现了,它解释了如何编写这样一个安全管理器。 但是在任何地方我都找不到如何将这个定制的IInternetSecurityManager“插入/覆盖”到TWebBrowser控件中

我需要做什么才能完全禁用所有安全限制? 谢谢你的提示

答案与您在问题中链接的答案相同:

承载WebBrowser控件或MSHTML的应用程序

或MSHTML主机可以创建一个安全管理器(通过实现该接口),用于处理对主机重要的URL操作和策略。其他URL操作和策略将传递给默认安全管理器,以便它能够适当地处理它们。该接口将用于处理来自组件的与Windows相关的信息,以便定制的安全管理器可以处理它所需的任何用户界面

要创建自定义安全管理器,组件必须实现接口。自定义安全管理器需要默认安全管理器执行的任何方法或URL操作都应返回

安全警告:错误地实现方法可能会损害应用程序的安全性。自定义安全管理器需要默认安全管理器执行的任何方法或URL操作都应返回。如果某个方法未覆盖默认行为并返回指示成功的HRESULT,则该操作将不被处理,并可能使用户面临权限提升攻击的风险。在继续之前,您应该先复习

组件还必须实现一个对象,该对象在嵌入或MSHTML时支持接口。

URL操作将执行以下步骤

  • MSHTML用于创建的实例

  • 调用MSHTML上的方法以获取其接口MSHTML然后调用接口上的
    QueryInterface
    方法以获取
    IServiceProvider
    接口

  • 调用以获取接口。然后,该组件将指向其
    IInternetSecurityManager
    实现的指针传递给

  • 从MSHTML到方法的调用从默认值传递到自定义安全管理器

  • 如果调用的方法返回,则使用的默认实现来解析调用。否则,将返回来自自定义安全管理器的结果

  • 将结果返回给MSHTML

  • 因此,首先需要编写一个实现
    IInternetSecurityManager
    接口的类

    其次,幸运的是,
    TOleControl
    (TWebBrowser的源代码)至少从Delphi 2006开始就实现了
    IOleClientSite
    IServiceProvider
    接口,所以您所需要做的就是为其公共事件分配一个处理程序,并且当MSHTML调用
    IServiceProvider.QueryService()时
    查找
    IInternetSecurityManager
    ,可以返回自定义安全管理器类的实例

    对于较旧的Delphi版本,您可以通过查询接口的
    DefaultInterface
    属性,手动向
    TWebBrowser
    提供一个
    IOleClientSite
    对象,然后调用该方法。下面的文章中演示了一个示例:

    TWebBrowser
    提供自定义
    IOleClientSite
    也是向MSHTML提供自定义、和对象的方式(MSHTML不会使用
    IServiceProvider
    查询它们,因此它们不会触发
    TWebBrowser.ServiceQuery
    事件)。这些接口是大多数选项的基础,如MSDN所述:

    当容器提供对ActiveX控件的支持时,定制机制被设计为自动化每当实例化WebBrowser控件时,它都会尝试从主机中查找
    IDocHostUIHandler
    IDocHostUIHandler2
    IDocHostShowUI
    实现(如果可用)。WebBrowser控件通过在主机界面上调用来实现这一点

    对于实现接口并通过浏览器方法传递指向的
    IOleClientSite
    指针的应用程序,此体系结构会自动工作

    答案与您在问题中链接的答案相同:

    承载WebBrowser控件或MSHTML的应用程序

    或MSHTML主机可以创建一个安全管理器(通过实现该接口),用于处理对主机重要的URL操作和策略。其他URL操作和策略将传递给默认安全管理器,以便它能够适当地处理它们。该接口将用于处理来自组件的与Windows相关的信息,以便定制的安全管理器可以处理它所需的任何用户界面

    要创建自定义安全管理器,组件必须实现接口。自定义安全管理器需要默认安全管理器执行的任何方法或URL操作都应返回

    安全警告: