MSHTML主机安全FAQ(第二部分)
MSHTML(又称Trident)是Internet Explorer浏览器的渲染引擎。它不仅是网页浏览的核心组件,也被广泛用于应用程序中的富UI展示。例如,Windows XP的"添加/删除程序"控制面板就是基于MSHTML实现的。但托管MSHTML时需要特别注意安全配置,本FAQ将帮助您避免常见错误。
如何启用IE高级安全缓解措施?
IE6 SP2引入的功能控制键(FCK)机制允许按进程启用/禁用浏览器功能。部分FCK与安全直接相关,以下是建议启用的关键FCK:
|
|
安全托管MSHTML的其他要点
-
信任决策与反欺骗
若托管来自互联网的内容,必须实现类似IE7地址栏保护机制,确保用户能做出有效信任判断。 -
新窗口管控
恶意脚本可能通过window.opener
反向操作宿主环境,建议通过SHDOCVW的WebBrowser控件事件管理新窗口创建。 -
保护模式集成
在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,开发者需严格遵循安全编码规范。
本文档按"原样"提供,不附带任何担保。