PowerShell 5.1: Invoke-WebRequest: uniemożliwianie wykonywania skryptów z zawartości sieci Web

Dotyczy
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

Uwaga

  • Data pierwotnej publikacji: 9 grudnia 2025 r.
  • Identyfikator KB: 5074596

Uwaga

W tym artykule opisano zmianę, która wpływa przede wszystkim na przedsiębiorstwa lub środowiska zarządzane przez dział informatyczny, w których skrypty programu PowerShell są używane do automatyzacji i pobierania zawartości sieci Web. Osoby People korzystające z urządzeń w ustawieniach osobistych lub domowych zazwyczaj nie muszą podejmować żadnych działań, ponieważ takie scenariusze są rzadkie poza środowiskami zarządzanymi przez dział IT.

Dziennik zmian
Zmień datę Opis zmiany
20 grudnia 2025 r.
  • Dodano "Ostrzeżenie o zabezpieczeniach" do sekcji "Podsumowanie".
  • Dodano następujący akapit do sekcji "Podsumowanie" w celu zwiększenia przejrzystości:

    Polecenie Invoke-WebRequest programu PowerShell wysyła żądanie HTTP lub HTTPS do serwera sieci Web i zwraca wyniki. W tym artykule opisano zmianę polegającą na tym, że Windows PowerShell 5.1 celowo wyświetla monit o potwierdzenie zabezpieczeń podczas korzystania z polecenia Invoke-WebRequest do pobierania stron internetowych bez specjalnych parametrów. To zachowanie występuje po zainstalowaniu obsługiwanych klientów i serwerów systemu Windows zainstalowaniu Aktualizacje instalacyjnych systemu Windows wydanych 9 grudnia 2025 r. i później. Aby uzyskać więcej informacji, zobacz CVE-2025-54100.
  • Dodano następujące punkty do pozycji "W przypadku zautomatyzowanych skryptów lub zaplanowanych zadań" w opcji 1 sekcji "Podejmij działanie".
    • W przypadku skryptów uruchamianych z opcją bez profilu: Jeśli skrypt ma wiele wystąpień wywołań Invoke-WebRequest, zadeklaruj $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true w górnej części skryptu.
    • Gdy Invoke-WebRequest jest używany z parametrem -UseBasicParsing , analizowanie pełnego modelu obiektowego dokumentu (DOM) przy użyciu składników programu Internet Explorer (HTMLDocument Interface (mshtml)) nie jest możliwe.
  • Do punktora "Zmodernizuj swoje podejście do interakcji w sieci Web" opcji 2 w sekcji "Podejmij działanie" dodano następujący punktor.
    • Invoke-Webrequest w Powershell Core (wersja 7.x lub nowsza) nie obsługuje analizowania DOM przy użyciu składników programu Internet Explorer. Jego domyślna analiza bezpiecznie pobierze zawartość bez wykonywania skryptu.

Podsumowanie

Podczas pobierania stron sieci Web bez specjalnych parametrów w programie Windows PowerShell 5.1 wyświetlany jest teraz monit o potwierdzenie zabezpieczeń.

Uwaga

  • Ostrzeżenie o zabezpieczeniach: Ryzyko wykonania skryptu Invoke-WebRequest analizuje zawartość strony internetowej. Podczas analizowania strony może zostać uruchomiony kod skryptu na stronie internetowej.
  • ZALECANE DZIAŁANIE: Użyj przełącznika -UseBasicParsing , aby uniknąć wykonywania kodu skryptu.
  • Czy chcesz kontynuować?

Ten monit ostrzega, że skrypty na stronie mogą być uruchamiane podczas analizowania i zaleca użycie
-UseBasicParsing parametr, aby uniknąć wykonywania skryptów. Użytkownicy muszą zdecydować, czy chcą kontynuować, czy anulować operację. Ta zmiana pomaga chronić przed złośliwą zawartością internetową, wymagając zgody użytkownika przed potencjalnie ryzykownymi działaniami.

Polecenie Invoke-WebRequest programu PowerShell wysyła żądanie HTTP lub HTTPS do serwera sieci Web i zwraca wyniki. W tym artykule opisano zmianę polegającą na tym, że program Windows PowerShell 5.1 celowo wyświetla monit o potwierdzenie zabezpieczeń podczas korzystania z polecenia Invoke-WebRequest do pobierania stron sieci Web bez specjalnych parametrów. To zachowanie występuje po zainstalowaniu przez obsługiwanych klientów i serwery systemu Windows Aktualizacje wydanego 9 grudnia 2025 r. i później. Aby uzyskać więcej informacji, zobacz CVE-2025-54100.

Co się zmieniło?

  • Poprzednie zachowanie

    • Analizowanie pełnego modelu obiektowego dokumentu (DOM) przy użyciu składników programu Internet Explorer (HTMLDocument Interface (mshtml)), które mogą wykonywać skrypty z pobranej zawartości.
  • Nowe zachowanie

    • Monit o potwierdzenie zabezpieczeń: Po zainstalowaniu aktualizacji systemu Windows wydanych 9 grudnia 2025 r. lub później uruchomienie polecenia Invoke-WebRequest (znanego również jako curl) w programie PowerShell 5.1 spowoduje wyzwolenie monitu o zabezpieczenie (gdy nie jest używany żaden specjalny parametr). W konsoli programu PowerShell zostanie wyświetlony monit z ostrzeżeniem o ryzyku wykonania skryptu

      Oznacza to, że program PowerShell wstrzymuje działanie, aby ostrzec, że bez zastosowania środków ostrożności zawartość skryptu strony internetowej może zostać wykonana w systemie podczas przetwarzania. Domyślnie, jeśli naciśniesz klawisz Enter (lub wybierzesz pozycję Nie), operacja zostanie anulowana ze względów bezpieczeństwa. Program PowerShell wyświetli komunikat informujący o anulowaniu z powodu problemów z zabezpieczeniami i zasugeruje ponowne uruchomienie polecenia przy użyciu polecenia
      -UseBasicParsing parametr do bezpiecznego przetwarzania. Jeśli wybierzesz opcję Tak, program PowerShell przystąpi do analizowania strony przy użyciu starszej metody (pełna analiza HTML), co oznacza, że załaduje zawartość i wszelkie osadzone skrypty tak, jak wcześniej. Zasadniczo wybranie opcji Tak oznacza, że akceptujesz ryzyko i zezwalasz na uruchomienie polecenia tak jak wcześniej, natomiast wybranie opcji Nie (ustawienie domyślne) powoduje zatrzymanie akcji mającej na celu zapewnienie ochrony.

    • Użycie interaktywne a oparte na skryptach: Wprowadzenie tego polecenia wpływa przede wszystkim na użycie interakcyjne. W sesjach interaktywnych zobaczysz ostrzeżenie i będziesz musiał zareagować. W przypadku skryptów automatycznych (scenariusze nieinterakcyjne, takie jak zaplanowane zadania lub potoki ciągłej integracji) ten monit może spowodować zawieszenie skryptu podczas oczekiwania na dane wejściowe. Aby tego uniknąć, zalecamy aktualizację takich skryptów, aby jawnie używały bezpiecznych parametrów (patrz poniżej), zapewniając, że nie wymagają one ręcznego potwierdzenia.

Aktywne działanie

Większość skryptów i poleceń programu PowerShell, które używają polecenia Invoke-WebRequest , będzie nadal działać z niewielką lub żadną modyfikacją. Nie ma to na przykład wpływu na skrypty, które tylko pobierają zawartość lub pracują z treścią odpowiedzi jako tekst lub dane, i nie wymagają żadnych zmian.

Jeśli masz skrypty, których dotyczy ta zmiana, użyj jednej z następujących metod.

Opcja 1: Użyj nowego bezpiecznego ustawienia domyślnego

W przypadku pobierania zawartości nie jest wymagane żadne działanie, jeśli typowe użycie polecenia Invoke-WebRequest polega na pobieraniu zawartości (na przykład pobieranie plików lub czytanie tekstu statycznego) i nie polegasz na zaawansowanych interakcjach z witryną ani analizowaniu HTML DOM. Nowe zachowanie domyślne jest bezpieczniejsze — skrypty osadzone w zawartości internetowej nie będą uruchamiane bez Twojej zgody — i jest to zalecana konfiguracja dla większości scenariuszy.

W przypadku użytku interakcyjnego po prostu odpowiedz Nie na nowy monit zabezpieczeń (lub naciśnij klawisz Enter , aby zaakceptować wartość domyślną) i ponownie uruchom polecenie z parametrem -UseBasicParsing , aby bezpiecznie pobrać zawartość. Pozwoli to uniknąć wykonywania kodu skryptu na pobranej stronie. Jeśli często pobierasz zawartość internetową interaktywnie, rozważ domyślne użycie parametru -UseBasicParsing w poleceniach, aby całkowicie pominąć monit i zapewnić maksymalne bezpieczeństwo.

W przypadku zautomatyzowanych skryptów lub zaplanowanych zadań zaktualizuj je, aby uwzględnić parametr -UseBasicParsing w wywołaniach Invoke-WebRequest . Spowoduje to wstępny wybór bezpiecznego zachowania, aby monit się nie pojawił, a skrypt nadal działał bez zakłóceń. W ten sposób zapewniasz, że automatyzacja będzie działać bezproblemowo po aktualizacji, nadal korzystając z ulepszonych zabezpieczeń.

  • W przypadku skryptów uruchamianych z opcją -NoProfile: Jeśli skrypt ma wiele wystąpień wywołań Invoke-WebRequest , zadeklaruj $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true w górnej części skryptu.
  • Gdy Invoke-WebRequest jest używany z parametrem -UseBasicParsing , analizowanie pełnego modelu obiektowego dokumentu (DOM) przy użyciu składników programu Internet Explorer (HTMLDocument Interface (mshtml)) nie jest możliwe.
Opcja 2. Refaktoryzacja skryptów w celu zapewnienia długoterminowego bezpieczeństwa

W przypadku skryptów lub automatyzacji, które zajmują się niezaufaną lub publiczną zawartością internetową i wymagają przetwarzania struktur lub formularzy HTML, rozważ ich refaktoryzację lub aktualizację w celu zapewnienia długoterminowego bezpieczeństwa. Zamiast polegać na PowerShell do analizowania i uruchamiania potencjalnie niebezpiecznych skryptów stron internetowych, możesz:

  • Używaj alternatywnych metod lub bibliotek analizowania (na przykład traktuj zawartość strony internetowej jako zwykły tekst lub plik XML, używając wyrażeń regularnych lub bibliotek analizowania XML/HTML, które nie wykonują skryptów).

  • Zmodernizuj swoje podejście do interakcji w sieci Web, na przykład używając nowszego programu PowerShell Core (wersja 7.x lub nowsza), który nie zależy od aparatu programu Internet Explorer i nie wymaga uruchamiania skryptów, lub używając wyspecjalizowanych narzędzi do skrobania stron internetowych, które obsługują zawartość w bezpieczniejszy sposób. Ogranicz zależność od funkcji specyficznych dla programu Internet Explorer, ponieważ program Internet Explorer jest przestarzały. Zaplanuj ponowne zapisanie części skryptów zależnych od tych funkcji, aby mogły one działać w środowisku, w którym zawartość internetowa jest bezpiecznie obsługiwana.

    • Invoke-WebRequest w środowisku PowerShell Core (wersja 7.x lub nowsza) nie obsługuje analizowania DOM przy użyciu składników programu Internet Explorer. Jego domyślna analiza bezpiecznie pobierze zawartość bez wykonywania skryptu.
  • Celem refaktoryzacji jest osiągnięcie potrzebnej funkcjonalności bez narażania się na zagrożenia bezpieczeństwa, a tym samym przyjęcie bezpieczniejszych ustawień domyślnych wprowadzonych przez tę zmianę.

Opcja 3: Zgoda na starsze zachowanie (tylko zaufane scenariusze)

Jeśli masz określoną potrzebę użycia pełnych możliwości analizowania kodu HTML polecenia Invoke-WebRequest (takich jak interakcja z polami formularza lub skrobanie danych strukturalnych) i ufasz źródłu zawartości internetowej, nadal możesz kontynuować starsze zachowanie analizy w zależności od przypadku. W sesjach interaktywnych oznacza to po prostu wybranie opcji Tak w monicie o potwierdzenie, aby umożliwić kontynuowanie operacji. Za każdym razem otrzymasz przypomnienie o zagrożeniu bezpieczeństwa. Postępowanie bez parametru -UseBasicParsing powinno być ograniczone do scenariuszy, w których całkowicie ufasz zawartości sieci web (na przykład wewnętrznym aplikacjom internetowym znajdującym się pod Twoją kontrolą lub znanym bezpiecznym witrynom internetowym).

Ważne

Ta metoda nie jest zalecana w przypadku skryptów uruchamianych na niezaufanej lub publicznej zawartości internetowej, ponieważ ponownie wprowadza ryzyko cichego wykonywania skryptów, które ta aktualizacja ma złagodzić. Ponadto, w przypadku automatyzacji nieinteraktywnej, nie ma wbudowanego mechanizmu automatycznego wyrażania zgody na polecenie, więc poleganie na pełnym parsowaniu w skryptach nie jest wskazane (oprócz tego, że jest ryzykowne). Tej opcji należy używać sporadycznie i tylko tymczasowo.

Często zadawane pytania

Czy ta zmiana wpływa na moje skrypty?

W większości przypadków skrypty pobierające pliki lub pobierające zawartość internetową jako tekst nadal będą działać. Aby uniknąć monitu, dodaj parametr -UseBasicParsing .

Skrypty korzystające z zaawansowanego parsowania HTML (takie jak formularze lub DOM) mogą zawieszać lub wyświetlać surowe dane zamiast obiektów strukturalnych; Konieczne będzie przełączenie się do podstawowej analizy lub zmodyfikowanie skryptu, aby obsługiwać zawartość w inny sposób.

Jak mogę uniknąć nowego monitu o potwierdzenie w moich skryptach?

Zawsze używaj parametru -UseBasicParsing z poleceniemInvoke-WebRequest w skryptach programu PowerShell, aby zapewnić bezpieczne, nieinterakcyjne wykonywanie.

Czy ta zmiana wymaga wykonania jakichkolwiek działań w przypadku starszych skryptów?

Tak. Skrypty zależne od starszej analizy muszą zostać zaktualizowane, aby włączyć lub refaktoryzować.

Jak ta zmiana jest odzwierciedlana w poprawkach na gorąco i aktualizacjach standardowych?

Zmiana w programie PowerShell dotyczy zarówno aktualizacji standardowych, jak i aktualizacji poprawki na gorąco, powodując taką samą zmianę działania.

Czy ta zmiana jest zgodna z programem PowerShell 7?

Tak. Program PowerShell 7 używa już domyślnie bezpiecznego analizowania.

Co należy zrobić w przypadku skryptów lub modułów innych firm?

Skontaktuj się z właścicielami modułu, aby uzyskać informacje na temat planów pomocy technicznej. Użyj tymczasowo zgody na zaufaną zawartość podczas migracji.

Jak mogę sprawdzić, czy środowisko jest gotowe?

Aby przygotować się na tę zmianę i sprawdzić jej poprawność, wykonaj następujące czynności:

  • Identyfikowanie skryptów przy użyciu funkcji DOM
  • Automatyzacja testów z nową wartością domyślną.
  • Ogranicz starszą zgodę do zaufanych źródeł.
  • Zaplanuj refaktoryzację niezaufanej zawartości.