微软承认:Windows 11 默认安全策略破坏旧版 JScript 兼容性

微软近日发布了一篇新的支持文章,正式承认了一个困扰用户近一年的兼容性问题。该问题源于 Windows 11 24H2 及更高版本(包括最新的 25H2)中一项以安全为核心的默认更改:将 JScript 引擎从旧的 jscript9.dll 切换至更安全的 JScript9Legacy

这一旨在防御跨站脚本(XSS)等网络攻击的升级,虽然提升了系统安全性,却意外破坏了依赖旧版行为的应用程序和基于 Web 的组件。

核心冲突:安全性 vs 兼容性

为了减少与旧版脚本相关的安全漏洞,微软在 Windows 11 24H2 中默认启用了 JScript9Legacy 引擎。新引擎实施了更严格的执行策略和改进的对象处理机制,有效缓解了恶意代码注入风险。

然而,这种安全强化带来了副作用:

  • 执行上下文不持久:在旧的 JScript 引擎中,全局定义和执行状态会在脚本之间自动保留。而在新模型下,这种行为默认被禁用。
  • 应用崩溃或功能失效:许多旧版应用和依赖 polyfill 的网页组件假设函数和定义在脚本执行结束后依然可用。由于新引擎不再保留这些状态,导致这些工作负载失败。

微软指出,尽管早在 2025 年 7 月就已引入此更改,并在随后的 KB5077241 更新中提供了解决方案,但该修复并未在后续更新中自动启用,导致问题持续存在。

解决方案:通过注册表手动开启“持久性”

对于受此问题影响的企业管理员或个人用户,微软提供了通过注册表显式开启持久化执行上下文的解决方法。这需要修改 FEATURE_ENABLE_PERSISTENCE 注册表项。

操作步骤:

  1. 创建注册表项
    以管理员身份运行命令提示符,执行以下命令创建功能控制路径:reg add "HKLM\Software\Policies\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ENABLE_PERSISTENCE"
  2. 配置 DWORD 值
    在上述新建的项下,根据需求创建一个新的 DWORD (32-bit) 值:
    • 针对特定进程
      • 名称:输入目标进程的名称(例如 oldapp.exe)。
      • 数值数据:设置为 1
    • 针对所有进程(全局启用)
      • 名称:输入 *
      • 数值数据:设置为 1
  3. 重启生效
    修改完成后,重启受影响的应用程序或计算机以使更改生效。

建议与展望

虽然通过注册表可以恢复兼容性,但微软强调 JScript9Legacy 的安全性优势不容忽视。建议用户在仅对确实无法运行的关键旧应用启用此设置,并尽快联系软件供应商获取基于现代标准(如 ES6+)的更新版本。

对于 IT 管理员而言,在部署 Windows 11 24H2/25H2 之前,评估内部遗留系统的 JScript 依赖性至关重要,以便提前规划注册表策略或应用迁移方案。