MSHTML主机安全FAQ(第二部分):深入解析IE渲染引擎安全配置

本文详细探讨了MSHTML(Trident)渲染引擎的安全托管实践,包括功能控制键配置、信任决策防护、保护模式集成等关键安全考量,帮助开发者规避常见托管风险。

MSHTML主机安全FAQ(第二部分)

MSHTML(又称Trident)是Internet Explorer浏览器的渲染引擎。它不仅是网页浏览的核心组件,也被广泛用于应用程序中的富UI展示。例如,Windows XP的"添加/删除程序"控制面板就是基于MSHTML实现的。但托管MSHTML时需要特别注意安全配置,本FAQ将帮助您避免常见错误。

如何启用IE高级安全缓解措施?

IE6 SP2引入的功能控制键(FCK)机制允许按进程启用/禁用浏览器功能。部分FCK与安全直接相关,以下是建议启用的关键FCK:

1
2
3
4
5
FEATURE_LOCALMACHINE_LOCKDOWN
FEATURE_MIME_HANDLING
FEATURE_MIME_SNIFFING
...
[共列出22个安全相关FCK]

安全托管MSHTML的其他要点

  1. 信任决策与反欺骗
    若托管来自互联网的内容,必须实现类似IE7地址栏保护机制,确保用户能做出有效信任判断。

  2. 新窗口管控
    恶意脚本可能通过window.opener反向操作宿主环境,建议通过SHDOCVW的WebBrowser控件事件管理新窗口创建。

  3. 保护模式集成
    在Vista及以上系统,需注意MSHTML实例默认与宿主应用同权限级别(通常为中等完整性),避免成为脱离保护模式的跳板。

通用托管建议

  • 关键DOCHOSTUIFLAG安全标志:
    1
    2
    3
    
    DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE
    DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK
    ...
    
  • 下载控制标志(如DLCTL_NO_SCRIPTS)可有效限制危险内容执行
  • 邮件客户端等场景建议启用DLCTL_FORCEOFFLINE阻止外部资源加载

“高权限沙箱"特别警告

当MSHTML宿主赋予脚本特殊权限时(如HTML Help允许执行系统命令),攻击者会千方百计侵入宿主环境。常见危险实践包括:

  • 使用innerHTML/document.write写入不可信内容
  • 对不可信输入执行eval
  • 未验证URL协议直接引用等

建议考虑使用Silverlight或WPF等更安全的替代方案,若必须使用MSHTML,开发者需严格遵循安全编码规范。

本文档按"原样"提供,不附带任何担保。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计