PowerShell 5.1: Invoke-WebRequest: запобігання виконанню сценарію з веб-вмісту

Застосовується до
Win 10 Ent LTSB 2016 Win 10 Ent LTSC 2019 Windows 10 IoT Enterprise LTSC 2021 Windows 10, version 22H2, all editions Windows 11 Home and Pro, version 22H2 Windows 11 Enterprise Multi-Session, version 22H2 Windows 11 Enterprise and Education, version 22H2 Windows 11 IoT Enterprise, version 22H2 Windows 11 SE, version 23H2 Windows 11 Home and Pro, version 23H2 Windows 11 Enterprise and Education, version 23H2 Windows 11 Enterprise Multi-Session, version 23H2 Windows 11 version 24H2, all editions Windows 11 version 25H2, all editions Windows Server 2008 Premium Assurance Windows Server 2008 R2 Premium Assurance Windows Server 2012 ESU Windows Server 2012 R2 ESU Windows Server 2016 Windows Server 2019 Windows Server 2022 Windows Server 2025

Примітка.

  • Дата початкової публікації: 9 грудня 2025 р.
  • Ідентифікатор бази знань: 5074596

Примітка.

У цій статті описано зміну, яка в першу чергу впливає на корпоративні середовища або середовища, керовані ІТ-відділами, де сценарії PowerShell використовуються для автоматизації та отримання веб-вмісту. People використання пристроїв в особистих або домашніх умовах зазвичай не потребує жодних дій, оскільки ці сценарії рідко зустрічаються за межами середовищ, керованих ІТ-фахівцями.

Журнал змін
Змінення дати Змінити опис
20 грудня 2025 р.
  • Додано "Попередження безпеки" до розділу "Зведення".
  • Додано наступний абзац до розділу "Зведення" для ясності:

    Команда Invoke-WebRequest PowerShell надсилає запит HTTP або HTTPS до веб-сервера та повертає результати. У цій статті описано зміну посилення безпеки, коли Windows PowerShell версії 5.1 навмисно відображає запит на підтвердження системи безпеки під час використання команди Invoke-WebRequest для отримання віддаленого доступу до веб-сторінок без спеціальних параметрів. Ця поведінка спостерігається після інсталяції підтримуваних клієнтів і серверів Windows, інсталяції Windows Оновлення, випущеної 9 грудня 2025 р. або пізніше. Докладні відомості див. на сторінці CVE-2025-54100.
  • До пункту "Для автоматизованих сценаріїв або запланованих завдань" у варіанті 1 розділу "Дії" додано такі пункти маркірованого списку.
    • Для сценаріїв, які виконуються з параметром "без профілю": Якщо сценарій має багато екземплярів викликів Invoke-WebRequest, оголосіть $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true у верхній частині сценарію.
    • Якщо параметр Invoke-WebRequest використовується з параметром -UseBasicParsing, аналіз повної об'єктної моделі документа (DOM) за допомогою компонентів Internet Explorer (інтерфейсу HTMLDocument (mshtml)) неможливий.
  • Додано наступний пункт маркірованого списку до пункту "Модернізація підходу до веб-взаємодії" варіанта 2 в розділі "Дії".
    • Функція Invoke-Webrequest в Powershell Core (версії 7.x або пізнішої) не підтримує аналіз DOM за допомогою компонентів Internet Explorer. Його стандартний аналіз безпечно отримає вміст без виконання сценарію.

Зведення

Windows PowerShellWindows PowerShell 5.1 тепер відображає запит на підтвердження системи безпеки під час використання команди Invoke-WebRequest для отримання веб-сторінок без спеціальних параметрів.

Примітка.

  • Попередження системи безпеки. Ризик виконання сценарію Invoke-WebRequest аналізує вміст веб-сторінки. Код сценарію на веб-сторінці може виконуватися під час аналізу сторінки.
  • РЕКОМЕНДОВАНА ДІЯ: Використовуйте перемикач -UseBasicParsing, щоб уникнути виконання коду сценарію.
  • Продовжити?

Ця підказка попереджає про те, що сценарії на сторінці можуть виконуватися під час аналізу, і рекомендує використовувати
параметр -UseBasicParsing , щоб уникнути виконання будь-якого скрипта. Користувачі повинні скасувати операцію: продовжити чи скасувати. Ця зміна допомагає захиститися від зловмисного веб-вмісту, вимагаючи згоди користувача перед потенційно ризикованими діями.

Команда Invoke-WebRequest у PowerShell надсилає запит HTTP або HTTPS до веб-сервера та повертає результати. У цій статті описано зміну посилення безпеки, коли Windows PowerShell версії 5.1 навмисно відображає запит на підтвердження системи безпеки під час використання команди Invoke-WebRequest для отримання веб-сторінок без спеціальних параметрів. Ця поведінка спостерігається після інсталяції Windows Оновлення підтримуваних клієнтів і серверів Windows, випущеної 9 грудня 2025 р. або пізніше. Докладні відомості див. на сторінці CVE-2025-54100.

Що змінилося?

  • Попередня поведінка

    • повний аналіз об'єктної моделі документів (DOM) за допомогою компонентів Internet Explorer (інтерфейсу HTMLDocument (mshtml)), які можуть виконувати сценарії завантаженого вмісту.
  • Нова поведінка

    • Запит на підтвердження системи безпеки: Після інсталяції оновлень Windows, випущених 9 грудня 2025 р. або пізніше, виконання команди Invoke-WebRequest (також відомої як curl) у PowerShell 5.1 ініціюватиме запит системи безпеки (якщо спеціальний параметр не використовується). Підказка з'явиться в консолі PowerShell із попередженням про ризик виконання сценарію

      Це означає, що PowerShell призупиняє роботу, щоб попередити вас про те, що без запобіжних заходів вміст сценарію веб-сторінки може виконуватися в системі під час обробки. За замовчуванням, якщо ви натиснете клавішу Enter (або виберете "Ні"), операцію буде скасовано з міркувань безпеки. У PowerShell з'явиться повідомлення про те, що його було скасовано з міркувань безпеки, і буде запропоновано повторно виконати команду, використовуючи
      -Параметр UseBasicParsing для безпечної обробки. Якщо вибрати варіант " Так", PowerShell продовжить аналіз сторінки за допомогою попереднього методу (повний аналіз HTML), тобто завантажуватиме вміст і вбудовані сценарії, як раніше. По суті, вибір параметра "Так " означає, що ви приймаєте ризик і дозволяєте команді виконувати так само, як вона виконувалася раніше, тоді як вибір " Ні " (за замовчуванням) припиняє дію для захисту.

    • Інтерактивне та сценарне використання: Введення цієї підказки в першу чергу впливає на інтерактивне використання. Під час інтерактивних сеансів ви побачите попередження та будете змушені реагувати. Для автоматичних сценаріїв (неінтерактивних сценаріїв, як-от запланованих завдань або конвеєрів CI) цей запит може призвести до зависання сценарію під час очікування введення. Щоб уникнути цього, ми рекомендуємо оновити такі сценарії для явного використання безпечних параметрів (див. нижче) і переконатися, що вони не потребують підтвердження вручну.

Дійте рішучо

Більшість сценаріїв і команд PowerShell, які використовують команду Invoke-WebRequest , працюватимуть практично без змін. Наприклад, це не вплине на сценарії, які завантажують вміст або працюють з тілом відповіді у вигляді тексту чи даних.

Якщо ця зміна стосується сценаріїв, скористайтесь одним із наведених нижче підходів.

Варіант 1. Використання нового параметра безпеки за замовчуванням

Якщо команда Invoke-WebRequest зазвичай використовується для отримання вмісту (наприклад, завантаження файлів або читання статичного тексту), і ви не покладаєтеся на розширену взаємодію з сайтом або аналіз HTML DOM. Нова стандартна поведінка безпечніша: вбудовані у веб-вміст сценарії не запускатимуться без вашого дозволу. Це рекомендована конфігурація для більшості сценаріїв.

Для інтерактивного використання просто дайте відповідь " Ні " на новий запит системи безпеки (або натисніть клавішу Enter , щоб прийняти стандартний варіант) і повторно запустіть команду з параметром -UseBasicParsing , щоб безпечно отримати вміст. Це дозволить уникнути виконання коду скрипту на отриманій сторінці. Якщо ви часто отримуєте доступ до веб-вмісту в інтерактивному режимі, радимо використовувати параметр -UseBasicParsing за замовчуванням у своїх командах, щоб повністю пропустити запит і забезпечити максимальну безпеку.

Для автоматизованих сценаріїв або запланованих завдань слід додати параметр -UseBasicParsing до викликів Invoke-WebRequest . Цей параметр попередньо вибирає безпечну поведінку, щоб запит не відображався, а сценарій працював без переривань. Таким чином ви забезпечите безперебійну роботу автоматизації після оновлення, зберігаючи при цьому переваги покращеної безпеки.

  • Для сценаріїв, які виконуються з параметром -NoProfile: Якщо у скрипті багато випадків викликів Invoke-WebRequest , оголосіть $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true у верхній частині сценарію.
  • Якщо параметр Invoke-WebRequest використовується з параметром -UseBasicParsing, аналіз повної об'єктної моделі документа (DOM) за допомогою компонентів Internet Explorer (інтерфейсу HTMLDocument (mshtml)) неможливий.
Варіант 2. Рефакторинг сценаріїв для забезпечення довготривалої безпеки

Якщо ви використовуєте сценарії або автоматизацію, які мають справу з ненадійним або загальнодоступним веб-вмістом і потребують обробки структур або форм HTML, розгляньте можливість рефакторингу або оновлення їх для довгострокової безпеки. Аналіз і запуск потенційно небезпечних сценаріїв веб-сторінок не покладатися на PowerShell, ви можете:

  • використовувати альтернативні методи аналізу або бібліотеки (наприклад, обробляти вміст веб-сторінки як звичайний текст або XML, використовуючи бібліотеки аналізу регулярних виразів або XML/HTML, які не виконують сценарії).

  • Модернізуйте свій підхід до взаємодії з Інтернетом, можливо, використовуючи новіший випуск PowerShell Core (версії 7.x або новішої), який не залежить від обробника Internet Explorer і не запускає сценарії, або скориставшись спеціалізованими інструментами для збирання веб-сторінок, які безпечніше обробляють вміст. Обмежте залежність від функцій Internet Explorer, оскільки Internet Explorer застаріло. Заплануйте переписування частин сценаріїв, які залежать від цих функцій, щоб вони працювали в середовищі з безпечною обробкою веб-вмісту.

    • Функція Invoke-WebRequest в PowerShell Core (версії 7.x або пізнішої) не підтримує аналіз DOM за допомогою компонентів Internet Explorer. Його стандартний аналіз безпечно отримає вміст без виконання сценарію.
  • Мета рефакторингу полягає в тому, щоб досягти необхідної функціональності, не наражаючи себе на ризики безпеки, тим самим прийнявши безпечніші дефолти, запроваджені цією зміною.

Варіант 3. Увімкнення застарілої поведінки (лише довірені сценарії)

Якщо у вас є особлива потреба у використанні всіх можливостей аналізу HTML команди Invoke-WebRequest (наприклад, взаємодія з полями форм або скрейпінг структурованих даних) і ви довіряєте джерелу веб-вмісту, ви все одно можете приступати до застарілої поведінки аналізу в кожному конкретному випадку. Під час інтерактивних сеансів це просто означає, що в запиті на підтвердження потрібно вибрати варіант "Так ", щоб дозволити продовження операції. Щоразу, коли ви це робитимете, відображатиметься нагадування про ризик, який загрожуватиме безпеці. Використання без параметра -UseBasicParsing слід виконувати лише в сценаріях, де ви повністю довіряєте веб-вмісту (наприклад, внутрішні веб-програми під вашим контролем або відомі безпечні веб-сайти).

Важливо

Цей підхід не рекомендується використовувати для сценаріїв, запущених проти ненадійного або загальнодоступного вмісту веб-сайтів, оскільки він знову підвищує ризик безшумного виконання сценаріїв, який це оновлення покликане зменшити. Крім того, для неінтерактивної автоматизації немає вбудованого механізму автоматичної згоди на підказку, тому покладатися на повний парсинг у скриптах не рекомендується (крім того, що це ризиковано). Використовуйте цей варіант помірно і лише як тимчасовий захід.

Запитання й відповіді

Чи вплине ця зміна на мої сценарії?

Здебільшого сценарії, які завантажують файли або отримують веб-вміст у текстовому вигляді, працюватимуть. Щоб уникнути такого запиту, додайте параметр -UseBasicParsing .

Скрипти, що використовують розширений аналіз HTML (наприклад, форми або DOM), можуть висіти або виводити необроблені дані замість структурованих об'єктів; Вам потрібно буде перейти до базового аналізу або змінити сценарій, щоб обробляти вміст по-іншому.

Як уникнути нового запиту на підтвердження в сценарії?

Завжди використовуйте параметр -UseBasicParsing із командою Invoke-WebRequest у сценаріях PowerShell, щоб забезпечити безпечне неінтерактивне виконання.

Чи потрібна ця зміна для застарілих сценаріїв?

Так. Скрипти, які залежать від аналізу застарілих версій, необхідно оновити, щоб надати згоду або рефакторинг.

Як ця зміна відображається в hotpatch і стандартних оновленнях?

Зміна в PowerShell застосовується як до стандартних оновлень, так і до оновлень зі швидкими виправленнями, що призводить до однакових змін у поведінці.

Чи узгоджується ця зміна з оболонкою PowerShell 7?

Так. У PowerShell 7 уже за замовчуванням використовується безпечний аналіз.

Що робити зі сторонніми скриптами або модулями?

Щоб дізнатися про плани підтримки, зверніться до власників модулів. Тимчасове використання дозволу на отримання надійного вмісту під час перенесення даних.

Як перевірити, чи готове середовище?

Щоб підготуватися та перевірити цю зміну, радимо:

  • Визначати сценарії за допомогою функцій DOM.
  • Тестуйте автоматизацію за допомогою нового параметра за замовчуванням.
  • Обмежте згоду застарілих версій до надійних джерел.
  • Сплануйте рефакторинг для ненадійного вмісту.