PowerShell 5.1: Invoke-WebRequest: Scriptuitvoering van webinhoud voorkomen

Van toepassing op
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

Opmerking

  • Oorspronkelijke publicatiedatum: dinsdag 9 december 2025
  • KB-id: 5074596

Opmerking

In dit artikel wordt een wijziging beschreven die voornamelijk van invloed is op bedrijfs- of IT-beheerde omgevingen waar PowerShell-scripts worden gebruikt voor automatisering en het ophalen van webinhoud. People using devices in personal or home settings hoeven doorgaans niets te doen, omdat deze scenario's niet veel voorkomen buiten IT-beheerde omgevingen.

Wijzigingenlogboek
Datum wijzigen Beschrijving van wijziging
dinsdag 20 december 2025
  • De 'Beveiligingswaarschuwing' is toegevoegd aan de sectie 'Overzicht'.
  • De volgende alinea toegevoegd aan de sectie "Samenvatting" voor de duidelijkheid:

    De opdracht Invoke-WebRequest van PowerShell doet een HTTP- of HTTPS-aanvraag bij een webserver en retourneert de resultaten. In dit artikel wordt een wijziging in de beveiliging beschreven waarbij Windows PowerShell 5.1 opzettelijk een bevestigingsprompt voor beveiliging weergeeft bij het gebruik van de opdracht Invoke-WebRequest om webpagina's zonder speciale parameters op te halen. Dit gedrag treedt op nadat ondersteunde Windows-clients en -servers Windows-Updates hebben geïnstalleerd die zijn uitgebracht op en na 9 december 2025. Zie CVE-2025-54100 voor meer informatie.
  • De volgende opsommingstekens zijn toegevoegd aan 'Voor geautomatiseerde scripts of geplande taken' in optie 1 van de sectie 'Actie ondernemen'.
    • Voor scripts die worden uitgevoerd met de optie zonder profiel: Als het script veel exemplaren van de Invoke-WebRequest-aanroepen heeft, declareert u $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true boven aan het script.
    • Wanneer Invoke-WebRequest wordt gebruikt met de parameter -UseBasicParsing, is het parseren van DOM (Full Document Object Model) met Internet Explorer-onderdelen (HTMLDocument Interface) niet mogelijk.
  • Het volgende opsommingsteken is toegevoegd aan het opsommingsteken 'Moderniseer uw benadering van webinteracties' van optie 2 in de sectie 'Actie ondernemen'.
    • Invoke-Webrequest in Powershell Core (versie 7.x of hoger) biedt geen ondersteuning voor DOM-parsering met Internet Explorer-onderdelen. De standaardparsering haalt de inhoud veilig op zonder dat het script wordt uitgevoerd.

Samenvatting

In Windows PowerShell 5.1 wordt nu een beveiligingsbevestigingsprompt weergegeven wanneer u de opdracht Invoke-WebRequest gebruikt om webpagina's zonder speciale parameters op te halen.

Opmerking

  • Beveiligingswaarschuwing: Scriptuitvoeringsrisico Invoke-WebRequest parseert de inhoud van de webpagina. Scriptcode op de webpagina wordt mogelijk uitgevoerd wanneer de pagina wordt geparseerd.
  • AANBEVOLEN ACTIE: Gebruik de schakeloptie -UseBasicParsing om uitvoering van scriptcode te voorkomen.
  • Wilt u doorgaan?

Deze prompt waarschuwt dat scripts op de pagina kunnen worden uitgevoerd tijdens het parseren en adviseert het gebruik van de
-UseBasicParsing-parameter om scriptuitvoering te voorkomen. Gebruikers moeten kiezen of ze de bewerking willen voortzetten of annuleren. Deze wijziging helpt u te beschermen tegen schadelijke webinhoud door toestemming van de gebruiker te vereisen voor mogelijk riskante acties.

Met de opdracht Invoke-WebRequest van PowerShell wordt een HTTP- of HTTPS-aanvraag ingediend bij een webserver en worden de resultaten geretourneerd. In dit artikel wordt een wijziging in de beveiliging beschreven waarbij in Windows PowerShell 5.1 opzettelijk een bevestigingsprompt wordt weergegeven wanneer u de opdracht Invoke-WebRequest gebruikt om webpagina's zonder speciale parameters op te halen. Dit gedrag treedt op nadat ondersteunde Windows-clients en -servers Windows-Updates hebben geïnstalleerd die zijn uitgebracht op en na 9 december 2025. Zie CVE-2025-54100 voor meer informatie.

Wat is er veranderd?

  • Vorig gedrag

    • Volledige documentobjectmodelparsering (DOM) met Internet Explorer-onderdelen (HTMLDocument Interface (mshtml)) die scripts van gedownloade inhoud kunnen uitvoeren.
  • Nieuw gedrag

    • Bevestigingsprompt voor beveiliging: Na de installatie van de Windows-updates die zijn uitgebracht op of na 9 december 2025, activeert het uitvoeren van de opdracht Invoke-WebRequest (ook bekend als curl) in PowerShell 5.1 een beveiligingsprompt (wanneer er geen speciale parameter wordt gebruikt). De prompt wordt weergegeven in de PowerShell-console met een waarschuwing over het risico van het uitvoeren van scripts

      Dit betekent dat PowerShell een pauze inlast om u te waarschuwen dat zonder voorzorgsmaatregelen de inhoud van het webpaginascript op uw systeem kan worden uitgevoerd wanneer het wordt verwerkt. Als u op Enter drukt (of Nee kiest), wordt de bewerking standaard geannuleerd om veiligheidsredenen. PowerShell toont een bericht dat deze is geannuleerd vanwege beveiligingsproblemen en stelt voor om de opdracht opnieuw uit te voeren met behulp van de
      -UseBasicParsing-parameter voor veilige verwerking. Als u Ja kiest, zal PowerShell de pagina parseren met behulp van de oudere methode (volledige HTML-parsering), wat betekent dat de inhoud en eventuele ingesloten scripts op dezelfde manier worden geladen. Als u Ja kiest, betekent dit dat u het risico accepteert en toestaat dat de opdracht wordt uitgevoerd zoals voorheen, terwijl het kiezen van Nee (de standaardinstelling) de actie stopt om u te beschermen.

    • Interactief versus scriptgebruik: De introductie van deze prompt heeft voornamelijk invloed op interactief gebruik. In interactieve sessies zie je de waarschuwing en moet je reageren. Voor geautomatiseerde scripts (niet-interactieve scenario's zoals geplande taken of CI-pijplijnen) kan deze prompt ervoor zorgen dat het script vastloopt in afwachting van invoer. Om dit te voorkomen, raden we aan om dergelijke scripts bij te werken om expliciet veilige parameters te gebruiken (zie hieronder), zodat ze niet handmatig hoeven te worden bevestigd.

Actie ondernemen

De meeste PowerShell-scripts en -opdrachten die gebruikmaken van de opdracht Invoke-WebRequest blijven werken met weinig of geen aanpassingen. Scripts die bijvoorbeeld alleen inhoud downloaden of werken met de antwoordtekst als tekst of gegevens, worden niet beïnvloed en hoeven niet te worden gewijzigd.

Als u scripts hebt die worden beïnvloed door deze wijziging, gebruikt u een van de volgende benaderingen.

Optie 1: De nieuwe veilige standaardinstelling gebruiken

Voor het ophalen van inhoud hoeft u niets te doen als u de opdracht Invoke-WebRequest doorgaans gebruikt om inhoud op te halen (zoals het downloaden van bestanden of het lezen van statische tekst) en u niet afhankelijk bent van geavanceerde site-interactie of HTML DOM-parsering. Het nieuwe standaardgedrag is veiliger: scripts die zijn ingesloten in webinhoud worden niet uitgevoerd zonder uw toestemming. Dit is de aanbevolen configuratie voor de meeste scenario's.

Voor interactief gebruik antwoordt u gewoon Nee op de nieuwe beveiligingsprompt (of drukt u op Enter om de standaardwaarde te accepteren) en voert u de opdracht opnieuw uit met de parameter -UseBasicParsing om de inhoud veilig op te halen. Hiermee wordt voorkomen dat er scriptcode wordt uitgevoerd op de opgehaalde pagina. Als u vaak interactief webinhoud ophaalt, kunt u overwegen om standaard de parameter -UseBasicParsing in uw opdrachten te gebruiken om de prompt helemaal over te slaan en maximale veiligheid te garanderen.

Voor geautomatiseerde scripts of geplande taken moet u deze bijwerken met de parameter -UseBasicParsing in Invoke-WebRequest-aanroepen . Hiermee wordt het veilige gedrag vooraf geselecteerd, zodat de prompt niet wordt weergegeven en uw script zonder onderbreking wordt uitgevoerd. Op deze manier zorgt u ervoor dat uw automatisering naadloos werkt na de update, terwijl u toch profiteert van de verbeterde beveiliging.

  • Voor scripts die worden uitgevoerd met de optie -NoProfile: Als het script veel exemplaren van de Invoke-WebRequest-aanroepen heeft, declareert u $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true boven aan het script.
  • Wanneer Invoke-WebRequest wordt gebruikt met de parameter -UseBasicParsing, is het parseren van DOM (Full Document Object Model) met Internet Explorer-onderdelen (HTMLDocument Interface) niet mogelijk.
Optie 2: Refactor scripts voor beveiliging op de lange termijn

Voor scripts of automatisering die te maken hebben met niet-vertrouwde of openbare webinhoud en die verwerking van HTML-structuren of -formulieren vereisen, kunt u overwegen deze te herstructureren of bij te werken voor veiligheid op de lange termijn. In plaats van PowerShell te gebruiken voor het parseren en uitvoeren van potentieel schadelijke webpaginascripts, kunt u het volgende doen:

  • Gebruik alternatieve parseermethoden of bibliotheken (behandel de inhoud van de webpagina bijvoorbeeld als tekst zonder opmaak of XML, met behulp van regex- of XML/HTML-parseerbibliotheken die geen scripts uitvoeren).

  • Moderniseer uw benadering van webinteracties, misschien door nieuwere PowerShell Core (versie 7.x of hoger) te gebruiken, die niet afhankelijk is van de engine van Internet Explorer en het uitvoeren van scripts vermijdt, of door gespecialiseerde webscraping-hulpprogramma's te gebruiken die inhoud veiliger verwerken. Beperk het vertrouwen op specifieke functies van Internet Explorer, aangezien Internet Explorer wordt afgeschaft. Plan om delen van uw scripts die afhankelijk zijn van deze functies te herschrijven, zodat ze kunnen werken in een omgeving waar veilig met webinhoud wordt omgegaan.

    • Invoke-WebRequest in PowerShell Core (versie 7.x of hoger) biedt geen ondersteuning voor DOM-parsering met Internet Explorer-onderdelen. De standaardparsering haalt de inhoud veilig op zonder dat het script wordt uitgevoerd.
  • Het doel van herstructurering is om de benodigde functionaliteit te bereiken zonder uzelf bloot te stellen aan beveiligingsrisico's, waardoor u de veiligere standaardinstellingen omarmt die door deze wijziging worden geïntroduceerd.

Optie 3: Opt-in voor verouderd gedrag (alleen vertrouwde scenario's)

Als u een specifieke behoefte hebt om de volledige HTML-parseermogelijkheden van de opdracht Invoke-WebRequest te gebruiken (zoals interactie met formuliervelden of het schrapen van gestructureerde gegevens) en u de bron van de webinhoud vertrouwt, kunt u nog steeds doorgaan met het oude parseergedrag per geval. In interactieve sessies betekent dit simpelweg dat u Ja kiest bij de bevestigingsprompt om de bewerking voort te zetten. U ontvangt telkens wanneer u dit doet een herinnering van het veiligheidsrisico. Doorgaan zonder de parameter -UseBasicParsing moet worden beperkt tot scenario's waarin u de webinhoud volledig vertrouwt (bijvoorbeeld interne webtoepassingen onder uw beheer of bekende veilige websites).

Belangrijk

Deze aanpak wordt niet aanbevolen voor scripts die worden uitgevoerd op niet-vertrouwde of openbare webinhoud, omdat hierdoor het risico van uitvoering van scripts op de achtergrond opnieuw wordt geïntroduceerd, dat met deze update moet worden beperkt. Ook is er voor niet-interactieve automatisering geen ingebouwd mechanisme om automatisch in te stemmen met de prompt, dus vertrouwen op volledige parsering in scripts is niet aan te raden (naast dat het riskant is). Gebruik deze optie niet te vaak en alleen als tijdelijke maatregel.

Veelgestelde vragen

Heeft deze wijziging invloed op mijn scripts?

In de meeste gevallen werken scripts die bestanden downloaden of webinhoud ophalen als tekst nog steeds. Als u de prompt wilt voorkomen, voegt u de parameter -UseBasicParsing toe.

Scripts die gebruikmaken van geavanceerde HTML-parsering (zoals formulieren of DOM) kunnen vastlopen of onbewerkte gegevens uitvoeren in plaats van gestructureerde objecten. Je moet overschakelen naar eenvoudige parsering of je script aanpassen om inhoud anders te verwerken.

Hoe kan ik de nieuwe bevestigingsprompt in mijn scripts vermijden?

Gebruik altijd de parameter -UseBasicParsing met de opdracht Invoke-WebRequest in PowerShell-scripts om een veilige, niet-interactieve uitvoering te garanderen.

Moet er voor deze wijziging actie worden ondernomen voor oudere scripts?

Ja. Scripts die afhankelijk zijn van verouderde parsering moeten worden bijgewerkt om te kunnen worden aangemeld of gefactoriseerd.

Hoe wordt deze wijziging weerspiegeld in hotpatch- en standaardupdates?

De wijziging in PowerShell is toepasbaar op zowel standaardupdates als hotpatch-updates, wat resulteert in dezelfde gedragswijziging.

Is deze wijziging afgestemd op PowerShell 7?

Ja. PowerShell 7 maakt standaard al gebruik van veilig parseren.

Wat moet ik doen met scripts of modules van derden?

Neem contact op met eigenaren van de module voor ondersteuningsplannen. Gebruik opt-in tijdelijk voor vertrouwde inhoud tijdens de migratie.

Hoe kan ik controleren of mijn omgeving gereed is?

Ter voorbereiding op deze wijziging en om deze wijziging te valideren, raden we u het volgende aan:

  • Identificeer scripts met behulp van DOM-functies.
  • Test automatisering met de nieuwe standaardinstelling.
  • Beperk oude opt-in tot vertrouwde bronnen.
  • Herstructurering plannen voor niet-vertrouwde inhoud.