PowerShell 5.1: Invoke-WebRequest: Preprečevanje izvajanja skripta iz spletne vsebine

Velja za
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

Opomba

  • Izvirni datum objave: 9 decembra, 2025
  • ID zbirke znanja: 5074596

Opomba

V tem članku je opisana sprememba, ki vpliva predvsem na okolja podjetja ali IT-ja, v katerih se skripti PowerShell uporabljajo za avtomatizacijo in pridobivanje spletne vsebine. People using devices in personal or home environments generally nie naredi ničesar, saj so ti primeri redki zunaj okolij, ki jih upravlja IT.

Dnevnik sprememb
Spremenite datum Opis spremembe
20. decembra 2025
  • V razdelek »Povzetek« je dodano »Varnostno opozorilo«.
  • V razdelek »Povzetek« smo zaradi jasnosti dodali naslednji odstavek:

    Ukaz Invoke-WebRequest lupine PowerShell pošlje zahtevo za HTTP ali HTTPS spletnemu strežniku in vrne rezultate. V tem članku je dokumentirana sprememba utrjevanja, pri kateri Windows PowerShell 5.1 namerno prikaže poziv za potrditev varnosti pri uporabi ukaza Invoke-WebRequest za pridobivanje spletnih strani brez posebnih parametrov. Do tega pride po namestitvi podprtih odjemalcev in strežnikov sistema Windows in namestijo Posodobitve sistema Windows, izdane 9. decembra 2025 in pozneje. Če želite več informacij, glejte CVE-2025-54100.
  • V razdelek »Začni ukrepanje« smo dodali te alineje v razdelek »Za avtomatizirane skripte ali načrtovana opravila«.
    • Za skripte, ki se izvajajo z možnostjo brez profila: Če se v skriptu večkrat ponovi Invoke-WebRequest klicev, na vrhu skripta objavite $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true .
    • Ko se Invoke-WebRequest uporablja s parametrom -UseBasicParsing , razčlenjevanje celotnega predmetnega modela DOM (Full Document Object) s komponentami brskalnika Internet Explorer (HTMLDocument Interface (mshtml))) ni mogoče.
  • V razdelku »Ukrepajte« v razdelku »Ukrepajte« smo dodali naslednjo točko v razdelku »Posodobite svoj pristop k spletnih interakcijam«.
    • Invoke-Webrequest v Powershell Core (različica 7.x ali novejša) ne podpira razčlenjevanja DOM s komponentami Internet Explorerja. Privzeto razčlenjevanje bo varno pridobilo vsebino brez izvajanja skripta.

Povzetek

Windows PowerShell 5.1 zdaj prikaže poziv za potrditev varnosti pri uporabi ukaza Invoke-WebRequest za pridobivanje spletnih strani brez posebnih parametrov.

Opomba

  • Varnostno opozorilo: Skript izvedbe tveganja Invoke-WebRequest razčleni vsebino spletne strani. Koda skripta na spletni strani se lahko zažene, ko je stran razčlenjena.
  • PRIPOROČENO UKREPANJE: Uporabite stikalo -UseBasicParsing, da preprečite izvajanje kode skripta.
  • Ali želite nadaljevati?

Ta poziv opozori, da se lahko skripti na strani zaženejo med razčlenjevanjem in svetuje, da uporabite
-UseBasicParsing parameter, da se izognete izvajanju skripta. Uporabniki morajo nadaljevati ali preklicati operacijo. Ta sprememba pomaga pri zaščiti pred zlonamerno spletno vsebino tako, da pred morebitno tveganimi dejanji zahteva soglasje uporabnika.

Ukaz Invoke-WebRequest lupine PowerShell pošlje zahtevo HTTP ali HTTPS spletnemu strežniku in vrne rezultate. V tem članku je dokumentirana sprememba utrjevanja, pri kateri Windows PowerShell 5.1 namerno prikaže poziv za potrditev varnosti pri uporabi ukaza Invoke-WebRequest za dobivanje spletnih strani brez posebnih parametrov. To vedenje se zgodi po tem, ko podprti odjemalci in strežniki Windows namestijo Posodobitve sistema Windows, izdane 9. decembra 2025 in pozneje. Če želite več informacij, glejte CVE-2025-54100.

Kaj se je spremenilo?

  • Prejšnje vedenje

    • Razčlenjevanje celotnega predmetnega modela dokumenta (DOM) s komponentami brskalnika Internet Explorer (HTMLDocument Interface (mshtml)), ki omogoča izvajanje skriptov iz prenesene vsebine.
  • Novo vedenje

    • Poziv za potrditev varnosti: Po namestitvi posodobitev sistema Windows, izdanih 9. decembra 2025 ali pozneje, bo izvajanje ukaza Invoke-WebRequest (znanega tudi kot curl) v lupini PowerShell 5.1 sprožilo varnostni poziv (če ni uporabljen noben poseben parameter). V konzoli PowerShell se prikaže poziv z opozorilom glede tveganja izvajanja skripta

      To pomeni, da se PowerShell začasno ustavi, da bi vas opozoril, da se lahko brez varnostnih ukrepov vsebina skripta spletne strani izvede v vašem sistemu, ko bo obdelana. Če pritisnete tipko Enter (ali izberete »Ne«), bo postopek zaradi varnosti privzeto preklican. PowerShell prikaže sporočilo, da je bila preklicana zaradi varnostnih pomislekov, in predlaga ponovni zagon ukaza z uporabo ukaza
      -UseBasicParsing parameter za varno obdelavo. Če izberete »Da«, bo PowerShell nadaljeval z razčlenjevanjem strani s starejšim načinom (polno razčlenjevanje HTML-ja), kar pomeni, da bo naložil vsebino in vse vdelane skripte kot nekoč. Če izberete »Da «, v bistvu sprejemate tveganje in dovolite, da se ukaz izvaja kot prej, medtem ko možnost »Ne« (privzeto) ustavi dejanje, da bi vas zaščitil.

    • Interaktivna in skriptna uporaba: Uvedba tega poziva vpliva predvsem na interaktivno uporabo. V interaktivnih sejah boste videli opozorilo in se morate odzvati. Pri avtomatiziranih skriptih (neinteraktivni scenariji, kot so načrtovana opravila ali cevovodi CI) lahko ta poziv povzroči, da se skript med čakanjem na vnos preneha odzivati. Če se želite temu izogniti, priporočamo, da takšne skripte posodobite tako, da izrecno uporabljajo varne parametre (glejte spodaj), pri čemer zagotovite, da ne zahtevajo ročne potrditve.

Vzemite stvari v svoje roke

Večina skriptov in ukazov PowerShell, ki uporabljajo ukaz Invoke-WebRequest , bo še naprej delovala z nekaj spremembami ali brez sprememb. To na primer ne vpliva na skripte, ki prenesejo le vsebino ali delujejo s telesom odgovora kot besedilo ali podatke, in ne zahtevajo sprememb.

Če imate skripte, na katere vpliva ta sprememba, uporabite enega od teh načinov.

1. možnost: uporabite novo, varno privzeto nastavitev

Če ukaz Invoke-WebRequest običajno uporabljate za pridobivanje vsebine (na primer prenos datotek ali branje statičnega besedila), vam za pridobivanje vsebine ni treba izvesti nobenega dejanja in če se ne zanašate na napredno interakcijo z mestom ali razčlenjevanje HTML DOM. Novo privzeto vedenje je varnejše – skripti, vdelani v spletno vsebino, se ne bodo izvajali brez vašega dovoljenja – in to je priporočena konfiguracija za večino primerov.

Za interaktivno uporabo preprosto odgovorite ne na nov varnostni poziv (ali pritisnite Enter , da sprejmete privzeto) in znova zaženite ukaz s parametrom -UseBasicParsing , da varno pridobite vsebino. S tem se izognete izvedbi kode skripta na pridobljeni strani. Če pogosto pridobivate spletno vsebino interaktivno, razmislite o uporabi parametra -UseBasicParsing privzeto v ukazih, da v celoti preskočite poziv in zagotovite največjo možno varnost.

Za avtomatizirane skripte ali načrtovana opravila jih posodobite tako, da bodo vključevali parameter -UseBasicParsing v klicih Invoke-WebRequest . S tem vnaprej izberete varno vedenje, tako da se poziv ne prikaže, skript pa se še naprej izvaja brez prekinitev. S tem zagotovite, da se avtomatizacija po posodobitvi izvaja brez težav, hkrati pa še vedno izkorišča prednosti izboljšane varnosti.

  • Za skripte, ki se izvajajo z možnostjo -NoProfile: Če se v skriptu večkrat ponovijo klici Invoke-WebRequest , na vrhu skripta deklarirajte $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true .
  • Ko se Invoke-WebRequest uporablja s parametrom -UseBasicParsing , razčlenjevanje celotnega predmetnega modela DOM (Full Document Object) s komponentami brskalnika Internet Explorer (HTMLDocument Interface (mshtml))) ni mogoče.
2. možnost: Refaktoriranje skriptov za dolgoročno varnost

Za skripte ali avtomatizacijo, ki obravnavajo spletno vsebino, ki ni vredna zaupanja ali je javna, in zahtevajo obdelavo struktur ali obrazcev HTML, razmislite o njihovem preoblikovanju ali posodobitvi zaradi dolgoročne varnosti. Namesto da se zanašate na PowerShell za razčlenjevanje in zagon potencialno nevarnih skriptov spletnih strani, lahko:

  • Uporabite alternativne metode razčlenjevanja ali knjižnice (vsebino spletne strani obravnavajte na primer kot golo besedilo ali XML, pri čemer uporabite knjižnice regex ali knjižnice za razčlenjevanje XML/HTML, ki ne izvajajo skriptov).

  • Posodobite svoj pristop k spletnih interakcijam, na primer z uporabo novejšega jedra ogrodja PowerShell (različica 7.x ali novejša), ki ni odvisno od mehanizma brskalnika Internet Explorer in se izogne zagonu skriptov, ali pa s specializiranimi orodji za pridobivanje spletnih vsebin, ki varneje obravnavajo vsebino. Omejite zanašanje na funkcije, značilne za Internet Explorer, saj je Internet Explorer opuščen. Načrtujte preoblikovanje delov skript, ki so odvisni od teh funkcij, tako da bodo lahko delovali v okolju, kjer je spletna vsebina varno obravnavana.

    • Invoke-WebRequest v ogrodju PowerShell Core (različica 7.x ali novejša) ne podpira razčlenjevanja DOM s komponentami brskalnika Internet Explorer. Privzeto razčlenjevanje bo varno pridobilo vsebino brez izvajanja skripta.
  • Cilj preoblikovanja je doseči potrebno funkcionalnost, ne da bi bili izpostavljeni varnostnim tveganjem, in s tem sprejeti varnejše privzete nastavitve, ki jih uvaja ta sprememba.

3. možnost: privolitev v podedovano vedenje (le zaupanja vredni scenariji)

Če morate uporabiti vse zmogljivosti razčlenjevanja HTML ukaza Invoke-WebRequest (na primer interakcijo s polji obrazca ali zbiranje strukturiranih podatkov) in zaupate viru spletne vsebine, lahko še vedno nadaljujete s podedovanim vedenjem razčlenjevanja za vsak primer posebej. V interaktivnih sejah to preprosto pomeni, da v pozivu za potrditev izberete »Da« , da dovolite nadaljevanje postopka. Vsakič ko to storite, boste prejeli opomnik o varnostnem tveganju. Delovanje brez parametra »-UseBasicParsing « mora biti omejeno na scenarije, v katerih popolnoma zaupate spletni vsebini (na primer internim spletnim programom pod vašim nadzorom ali znanim varnim spletnim mestom).

Pomembno

Ta pristop ni priporočljiv za skripte, ki se izvajajo v vsebini, ki ni vredna zaupanja, ali javni spletni vsebini, saj znova uvaja tveganje tihega izvajanja skripta, ki naj bi ga ublažila ta posodobitev. Prav tako za neinteraktivno avtomatizacijo ni vgrajenega mehanizma za samodejno soglasje v poziv, zato se zanašanje na popolno razčlenjevanje skriptov ni priporočljivo (poleg tega, da je tvegano). To možnost uporabljajte redko in le kot začasen ukrep.

Pogosta vprašanja

Ali ta sprememba vpliva na moje skripte?

V večini primerov bodo skripti, ki prenesejo datoteke ali dobijo spletno vsebino kot besedilo, še vedno delovali. Če se želite izogniti pozivu, dodajte parameter »-UseBasicParsing« .

Skripti, ki uporabljajo napredno razčlenjevanje HTML (kot so obrazci ali DOM), lahko namesto strukturiranih predmetov obesijo ali izpišejo neobdelane podatke; Preklopiti boste morali na osnovno razčlenjevanje ali spremeniti skript, da bo vsebina obravnavala drugače.

Kako se lahko izognem novemu potrditvenemu pozivu v mojih skriptih?

Vedno uporabite parameter -UseBasicParsing z ukazom Invoke-WebRequest v skriptih PowerShell, da zagotovite varno, neinteraktivno izvajanje.

Ali ta sprememba zahteva dejanja za starejše skripte?

Da. Skripte, odvisno od starejšega razčlenjevanja, je treba posodobiti, da lahko privolite v sodelovanje ali preoblikujete.

Kako se ta sprememba odraža v posodobitvah hitrih popravkov in standardnih posodobitvah?

Sprememba ogrodja PowerShell velja tako za standardne posodobitve kot tudi za posodobitve hitrih popravkov, pri čemer se spremeni enako vedenje.

Ali je ta sprememba v skladu z ogrodjem PowerShell 7?

Da. PowerShell 7 že privzeto uporablja varno razčlenjevanje.

Kaj naj naredim s skripti ali moduli drugih izdelovalcev?

Obrnite se na lastnike modulov za pakete podpore. Začasno uporabite privolitev v sodelovanje za zaupanja vredno vsebino med selitvijo.

Kako preverim, ali je moje okolje pripravljeno?

Če se želite pripraviti na to spremembo in jo potrditi, priporočamo, da:

  • Prepoznavanje skriptov s funkcijami DOM.
  • Preskusite avtomatizacijo z novo privzeto različico.
  • Podedovane privolitve v sodelovanje omejite na zaupanja vredne vire.
  • Načrtujte preoblikovanje vsebine, ki ni vredna zaupanja.