原始发布日期: 2025 年 12 月 9 日
KB ID:5074596
本文介绍主要影响企业或 IT 托管环境(其中 PowerShell 脚本用于自动化和 Web 内容检索)的更改。 人员在个人或家庭设置中使用设备通常不需要采取任何作,因为这些方案在 IT 托管环境之外并不常见。
|
更改日期 |
更改说明 |
|
2025 年 12 月 20 日 |
|
摘要
Windows PowerShell 5.1 现在在使用 Invoke-WebRequest 命令提取没有特殊参数的网页时显示安全确认提示。
安全警告: 脚本执行风险 Invoke-WebRequest 分析网页的内容。 分析页面时,可能会运行网页中的脚本代码。
建议的作:使用 -UseBasicParsing 开关来避免脚本代码执行。
是否继续?
此提示警告页面中的脚本可能在分析期间运行,并建议使用 -UseBasicParsing 参数来避免执行任何脚本。 用户必须选择继续或取消作。 此更改通过在潜在风险作之前要求用户同意来帮助防范恶意 Web 内容。
PowerShell 的 Invoke-WebRequest 命令向 Web 服务器发出 HTTP 或 HTTPS 请求并返回结果。 本文介绍了一个强化更改,其中 Windows PowerShell 5.1 在使用 Invoke-WebRequest 命令提取没有特殊参数的网页时特意显示安全确认提示。 在受支持的 Windows 客户端和服务器已安装 Windows 汇报 2025 年 12 月 9 日及之后发布后,会出现此行为。 有关详细信息,请参阅 CVE-2025-54100。
有何变化?
-
以前的行为
-
完整的文档对象模型 (DOM) 使用 Internet Explorer 组件 (HTMLDocument Interface (mshtml) ) 进行分析,后者可以从下载的内容执行脚本。
-
-
新行为
-
安全确认提示: 安装 2025 年 12 月 9 日或之后发布的 Windows 更新后,在 PowerShell 5.1 中运行 Invoke-WebRequest 命令 (也称为 curl) ,在没有使用特殊参数) 时,将触发安全提示 (。 提示显示在 PowerShell 控制台中,并显示有关 脚本执行风险的警告。 这意味着 PowerShell 会暂停警告你,在未采取预防措施的情况下,网页脚本内容可能会在处理时在系统上执行。 默认情况下,如果按 Enter (或选择“ 无) ”,作将被取消,以确保安全。 PowerShell 将显示一条消息,指出由于安全问题而取消,并建议使用 -UseBasicParsing 参数重新运行命令进行安全处理。 如果选择“ 是”,PowerShell 将继续使用旧方法分析页面, (完整的 HTML 分析) ,这意味着它将像以前一样加载内容和任何嵌入的脚本。 从本质上讲,选择“ 是”意味着你接受风险并允许命令像以前一样运行,而选择“ 否” (默认) 将停止作以保护你。
-
交互式与脚本使用: 引入此提示主要影响交互式使用。 在交互式会话中,你将看到警告,并且必须做出响应。 对于 (非交互方案(例如计划任务或 CI 管道) )的自动化脚本,此提示可能会导致脚本在等待输入时挂起。 为避免这种情况,我们建议更新此类脚本以显式使用安全参数 (请参阅以下) ,确保它们不需要手动确认。
-
采取操作
大多数使用 Invoke-WebRequest 命令的 PowerShell 脚本和命令将继续工作,几乎无需修改或无需修改。 例如,仅下载内容或将响应正文用作文本或数据的脚本不受影响,且无需更改。
如果有受此更改影响的脚本,请使用以下方法之一。
对于提取内容,如果 Invoke-WebRequest 命令的典型用法是提取内容 ((如下载文件或阅读静态文本) 并且不依赖于高级网站交互或 HTML DOM 分析),则无需执行任何作。 新的默认行为更安全,未经你的许可,Web 内容中嵌入的脚本将不会运行,这是大多数方案的建议配置。
若要进行交互式使用,只需 (响应 新的安全提示“否”或按 Enter 接受默认) 并使用 -UseBasicParsing 参数重新运行命令即可安全地检索内容。 这将避免在提取的页面中执行任何脚本代码。 如果经常以交互方式提取 Web 内容,请考虑在命令中默认使用 -UseBasicParsing 参数,以完全跳过提示并确保最大安全性。
对于自动脚本或计划任务,请更新它们以在 Invoke-WebRequest 调用上包括 -UseBasicParsing 参数。 这会预先选择安全行为,以便不会显示提示,并且脚本继续运行而不会中断。 通过执行此作,可确保自动化在更新后无缝运行,同时仍利用改进的安全性。
-
对于使用 -NoProfile 选项运行的脚本:如果脚本多次发生 Invoke-WebRequest 调用,请在脚本顶部声明 $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true 。
-
当 Invoke-WebRequest 与 -UseBasicParsing 参数一起使用时,不能使用 Internet Explorer 组件 (DOM) 完整文档对象模型 (HTMLDocument 接口 (mshtml) ) 进行分析。
对于处理不受信任的或公共 Web 内容并需要处理 HTML 结构或表单的脚本或自动化,请考虑 重构 或更新它们,以确保长期安全。 你可以:可以:而不是依赖 PowerShell 来分析和运行潜在危险的网页脚本:
-
使用替代分析方法或库 (例如,使用不执行脚本) 的正则表达式或 XML/HTML 分析库将网页内容视为纯文本或 XML。
-
实现 Web 交互方法的现代化,可能通过使用较新的 PowerShell Core (版本 7.x 或更高版本) 它不依赖于 Internet Explorer 的引擎并避免运行脚本,或者使用更安全地处理内容的专用 Web 抓取工具。 限制对特定于 Internet Explorer 的功能的依赖,因为 Internet Explorer 已弃用。 计划重写依赖于这些功能的部分脚本,以便在安全处理 Web 内容的环境中工作。
-
PowerShell Core (7.x 或更高版本中的 Invoke-WebRequest) 不支持使用 Internet Explorer 组件进行 DOM 分析。 其默认分析将安全地检索内容,而无需执行脚本。
-
-
重构的目标是在不让自己面临安全风险的情况下实现所需的功能,从而采用此更改引入的更安全的默认值。
如果特别需要使用 Invoke-WebRequest 命令的完整 HTML 分析功能 (例如与表单字段交互或抓取结构化数据) 并且你信任 Web 内容的源,则仍可逐个继续执行旧分析行为。 在交互式会话中,这仅意味着在确认提示下选择 “是”以允许作继续。 每次执行此作时,你都会收到有关安全风险的提醒。 在没有 -UseBasicParsing 参数的情况下继续作应仅限于完全信任 Web 内容 (例如,控制下的内部 Web 应用程序或已知安全网站) 。
重要: 对于针对不受信任的或公共 Web 内容运行的脚本,不建议使用此方法,因为它会重新引入此更新旨在缓解的静默脚本执行风险。 此外,对于非交互式自动化,没有内置机制来自动同意提示,因此,除了) 存在风险外,不建议 (依赖脚本中的完全分析。 请谨慎使用此选项,并且仅用作临时措施。
常见问题
在大多数情况下,下载文件或将 Web 内容提取为文本的脚本仍将有效。 若要避免出现提示,请添加 -UseBasicParsing 参数。
使用高级 HTML 分析 ((如窗体或 DOM) )的脚本可能会挂起或输出原始数据,而不是结构化对象;你需要切换到基本分析或修改脚本以不同方式处理内容。
始终将 -UseBasicParsing 参数与 PowerShell 脚本中的 Invoke-WebRequest 命令结合使用,以确保安全、非交互式执行。
是的。 必须更新依赖于旧分析的脚本才能选择加入或重构。
PowerShell 中的更改适用于标准更新和热补丁更新,导致相同的行为更改。
是的。 默认情况下,PowerShell 7 已使用安全分析。
请联系模块所有者获取支持计划。 迁移时暂时对受信任的内容使用选择加入。
若要准备和验证此更改,我们建议你:
-
使用 DOM 功能识别脚本。
-
使用新的默认值测试自动化。
-
将旧版选择加入限制为受信任的源。
-
规划不受信任的内容的重构。