PowerShell 5.1: Invoke-WebRequest: Förhindrar skriptkörning från webbinnehåll

Gäller för
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

Obs

  • Ursprungligt publiceringsdatum: Den 9 december 2025
  • KB-ID: 5074596

Obs

Den här artikeln beskriver en ändring som främst påverkar företags- eller IT-hanterade miljöer där PowerShell-skript används för automatisering och hämtning av webbinnehåll. People som använder enheter i personliga eller hemmiljöer behöver vanligtvis inte vidta några åtgärder eftersom dessa scenarier är ovanliga utanför IT-hanterade miljöer.

Ändringslogg
Ändra datum Beskrivning av ändring
Den 20 december 2025
  • "Säkerhetsvarning" har lagts till i avsnittet "Sammanfattning".
  • Följande stycke har lagts till i avsnittet "Sammanfattning" för tydlighetens skull:

    PowerShells Invoke-WebRequest-kommando skickar en HTTP- eller HTTPS-begäran till en webbserver och returnerar resultatet. I den här artikeln dokumenteras en härdningsändring där Windows PowerShell 5.1 avsiktligt visar en kontrollfråga när du använder kommandot Invoke-WebRequest för att hämta webbsidor utan särskilda parametrar. Det här beteendet inträffar när Windows-klienter och servrar som stöds har installerat installerat Windows Uppdateringar som släpptes 9 december 2025 och senare. Mer information finns i CVE-2025-54100.
  • Följande punkter har lagts till i "För automatiserade skript eller schemalagda uppgifter" i alternativ 1 i avsnittet "Vidta åtgärd".
    • För skript som körs med alternativet no-profile: Om skriptet har många förekomster av Invoke-WebRequest anrop deklarerar du $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true överst i skriptet.
    • När Invoke-WebRequest används med parametern -UseBasicParsing går det inte att parsa DOM-parsning (Full Document Object Model) med Internet Explorer-komponenter (HTMLDocument Interface (mshtml)).
  • Följande punkt har lagts till i punkten "Modernisera din metod för webbinteraktioner" i alternativ 2 i avsnittet "Vidta åtgärder".
    • Invoke-Webrequest i PowerShell Core (version 7.x eller senare) stöder inte DOM-parsning med Internet Explorer-komponenter. Standardparsning hämtar innehållet på ett säkert sätt utan skriptkörning.

Sammanfattning

I Windows PowerShell 5.1 visas nu en kontrollfråga när du använder kommandot Invoke-WebRequest för att hämta webbsidor utan särskilda parametrar.

Obs

  • Säkerhetsvarning: Script Execution Risk Invoke-WebRequest tolkar innehållet på webbsidan. Skriptkoden på webbsidan kan köras när sidan tolkas.
  • REKOMMENDERAD ÅTGÄRD: Använd växeln -UseBasicParsing för att undvika körning av skriptkod.
  • Vill du fortsätta?

Den här prompten varnar för att skript på sidan kan köras under parsning och ger råd om hur du använder
-UseBasicParsing-parameter för att undvika körning av skript. Användarna måste välja att fortsätta eller avbryta åtgärden. Den här ändringen skyddar mot skadligt webbinnehåll genom att kräva användarens medgivande före potentiellt riskfyllda åtgärder.

PowerShells Invoke-WebRequest-kommando gör en HTTP- eller HTTPS-begäran till en webbserver och returnerar resultatet. Den här artikeln dokumenterar en härdningsändring där Windows PowerShell 5.1 avsiktligt visar en fråga om säkerhetsbekräftelse när kommandot Invoke-WebRequest används för att hämta webbsidor utan särskilda parametrar. Det här beteendet inträffar efter att Windows-klienter och servrar som stöds har installerat Windows Uppdateringar som släpptes 9 december 2025 och senare. Mer information finns i CVE-2025-54100.

Vad har förändrats?

  • Föregående beteende

    • DOM (Full Document Object Model) parsning med Internet Explorer-komponenter (HTMLDocument Interface (mshtml)) som kan köra skript från nedladdat innehåll.
  • Nytt beteende

    • Fråga om säkerhetsbekräftelse: När du har installerat Windows-uppdateringarna som släpptes den 9 december 2025 eller senare utlöser du en säkerhetsfråga (när ingen särskild parameter används) genom att köra kommandot Invoke-WebRequest (även kallat curl) i PowerShell 5.1. Uppmaningen visas i PowerShell-konsolen med en varning om risken för körning av skript

      Det innebär att PowerShell pausar för att varna dig om att utan försiktighetsåtgärder kan webbsidesskriptinnehållet köras i systemet när det bearbetas. Om du trycker på Retur (eller väljer Nej) avbryts åtgärden som standard av säkerhetsskäl. PowerShell visar ett meddelande om att det har avbrutits på grund av säkerhetsproblem och föreslår att kommandot körs igen med hjälp av
      -UseBasicParsing-parameter för säker bearbetning. Om du väljer Ja fortsätter PowerShell att parsa sidan med den äldre metoden (fullständig HTML-parsning), vilket innebär att innehållet och eventuella inbäddade skript läses in precis som tidigare. Om du väljer Ja innebär det att du accepterar risken och tillåter att kommandot körs som det gjorde tidigare, medan du väljer Nej (standard) avslutar åtgärden för att skydda dig.

    • Interaktiv kontra skriptbaserad användning: Introduktionen av den här prompten påverkar främst interaktiv användning. I interaktiva sessioner ser du varningen och måste svara. För automatiserade skript (icke-interaktiva scenarier som schemalagda uppgifter eller CI-pipelines) kan den här prompten göra att skriptet låser sig medan du väntar på indata. För att undvika det rekommenderar vi att du uppdaterar sådana skript så att de uttryckligen använder säkra parametrar (se nedan), och säkerställer att de inte kräver manuell bekräftelse.

Agera

De flesta PowerShell-skript och -kommandon som använder kommandot Invoke-WebRequest fortsätter att fungera med få eller inga ändringar. Skript som bara laddar ned innehåll eller fungerar med svarstexten som text eller data påverkas till exempel inte och kräver inga ändringar.

Om du har skript som påverkas av den här ändringen använder du någon av följande metoder.

Alternativ 1: Använd den nya säkra standarden

För att hämta innehåll krävs ingen åtgärd om din vanliga användning av kommandot Invoke-WebRequest är att hämta innehåll (t.ex. ladda ned filer eller läsa statisk text) och du inte förlitar dig på avancerad webbplatsinteraktion eller HTML DOM-parsning. Det nya standardbeteendet är säkrare – skript som är inbäddade i webbinnehåll körs inte utan din tillåtelse – och det här är den rekommenderade konfigurationen för de flesta scenarier.

För interaktiv användning svarar du helt enkelt på Nej på den nya säkerhetsprompten (eller trycker på Retur för att acceptera standardvärdet) och kör kommandot igen med parametern -UseBasicParsing för att hämta innehållet på ett säkert sätt. På så sätt undviker du att köra någon skriptkod på den hämtade sidan. Om du ofta hämtar webbinnehåll interaktivt bör du överväga att använda parametern -UseBasicParsing som standard i kommandona för att hoppa över prompten helt och säkerställa maximal säkerhet.

För automatiserade skript eller schemalagda uppgifter uppdaterar du dem så att de innehåller parametern -UseBasicParsing i Invoke-WebRequest-anrop . Det här alternativet väljer det säkra beteendet så att uppmaningen inte visas och skriptet fortsätter att köras utan avbrott. Genom att göra detta säkerställer du att din automatisering körs sömlöst efter uppdateringen samtidigt som du drar nytta av den förbättrade säkerheten.

  • För skript som körs med alternativet -NoProfile: Om skriptet har många förekomster av anropen Invoke-WebRequest deklarerar du $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true överst i skriptet.
  • När Invoke-WebRequest används med parametern -UseBasicParsing går det inte att parsa DOM-parsning (Full Document Object Model) med Internet Explorer-komponenter (HTMLDocument Interface (mshtml)).
Alternativ 2: Omstrukturera skript för långsiktig säkerhet

För skript eller automatisering som hanterar ej betrott eller offentligt webbinnehåll och kräver bearbetning av HTML-strukturer eller formulär bör du överväga att refaktorisera eller uppdatera dem för långsiktig säkerhet. I stället för att förlita dig på PowerShell för att parsa och köra potentiellt farliga webbsideskript kan du:

  • Använd alternativa tolkningsmetoder eller bibliotek (behandla till exempel webbsidans innehåll som oformaterad text eller XML med hjälp av regex- eller XML/HTML-parsningsbibliotek som inte kör skript).

  • Modernisera din metod för webbinteraktioner, kanske genom att använda nyare PowerShell Core (version 7.x eller senare) som inte är beroende av Internet Explorer-motorn och undviker att köra skript, eller genom att använda specialiserade webbskrapningsverktyg som hanterar innehåll säkrare. Begränsa beroendet av Internet Explorer specifika funktioner eftersom Internet Explorer är inaktuellt. Planera att skriva om delar av dina skript som är beroende av dessa funktioner så att de kan fungera i en miljö där webbinnehåll hanteras säkert.

    • Invoke-WebRequest i PowerShell Core (version 7.x eller senare) stöder inte DOM-parsning med Internet Explorer-komponenter. Standardparsning hämtar innehållet på ett säkert sätt utan skriptkörning.
  • Målet med refaktorisering är att uppnå de funktioner som krävs utan att exponera dig för säkerhetsrisker, och därmed omfatta de säkrare standardinställningar som introduceras av den här ändringen.

Alternativ 3: Välj äldre beteende (endast betrodda scenarier)

Om du har ett specifikt behov av att använda kommandots fullständiga HTML-parsningsfunktioner (till exempel interagera med formulärfält eller skrapa strukturerade data) och du litar på källan till webbinnehållet, kan du fortfarande fortsätta med det äldre parsningsbeteendet från fall till fall. I interaktiva sessioner innebär det här att välja Ja i bekräftelserutan för att åtgärden ska kunna fortsätta. Du kommer att få en påminnelse om säkerhetsrisken varje gång du gör det. Om du fortsätter utan parametern -UseBasicParsing bör du begränsa till scenarier där du litar helt på webbinnehållet (till exempel interna webbprogram under din kontroll eller kända säkra webbplatser).

Viktigt!

Den här metoden rekommenderas inte för skript som körs mot icke betrott eller offentligt webbinnehåll, eftersom den återinför risken för obevakad skriptkörning som den här uppdateringen är avsedd att minska. För icke-interaktiv automatisering finns det inte heller någon inbyggd mekanism för att automatiskt godkänna prompten, så det är inte tillrådligt att förlita sig på fullständig parsning i skript (förutom att det är riskabelt). Använd det här alternativet sparsamt och endast som en tillfällig åtgärd.

Vanliga frågor och svar

Påverkar den här ändringen mina skript?

I de flesta fall fungerar skript som laddar ned filer eller hämtar webbinnehåll som text. Om du vill undvika prompten lägger du till parametern -UseBasicParsing .

Skript som använder avancerad HTML-tolkning (t.ex. formulär eller DOM) kan låsa sig eller mata ut rådata i stället för strukturerade objekt. Du måste växla till grundläggande parsning eller ändra skriptet om du vill hantera innehållet på ett annat sätt.

Hur kan jag undvika den nya bekräftelseprompten i mina skript?

Använd alltid parametern -UseBasicParsing med kommandot Invoke-WebRequest i PowerShell-skript för att säkerställa säker, icke-interaktiv körning.

Kräver den här ändringen någon åtgärd för äldre skript?

Ja. Skript som är beroende av äldre parsning måste uppdateras för att anmäla sig eller omstrukturera.

Hur återspeglas den här ändringen i hotpatch- och standarduppdateringar?

Ändringen i PowerShell gäller för både standarduppdateringar och hotpatch-uppdateringar, vilket resulterar i samma beteendeändring.

Stämmer den här ändringen överens med PowerShell 7?

Ja. I PowerShell 7 används redan säker parsning som standard.

Vad bör jag göra med skript eller moduler från tredje part?

Kontakta modulens ägare för supportavtal. Använd temporärt anmälningsfunktionen för betrott innehåll medan du migrerar.

Hur gör jag för att verifiera att min miljö är klar?

För att förbereda för och verifiera den här ändringen rekommenderar vi att du:

  • Identifiera skript med hjälp av DOM-funktioner.
  • Testa automatisering med den nya standarden.
  • Begränsa äldre opt-in till betrodda källor.
  • Planera refaktorisering för icke-betrott innehåll.