Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Výstraha
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Tento článek vysvětluje ukládání prostředků do mezipaměti pro Blazor WebAssembly a jak diagnostikovat a řešit selhání integrity.
Když se Blazor WebAssembly aplikace načte v prohlížeči, aplikace stáhne spouštěcí prostředky ze serveru:
- JavaScriptový kód pro spuštění aplikace
- .NET prostředí a sestavení
- Data specifická pro národní prostředí
Konfigurace spuštění Blazor, vložená do dotnet.js souboru, obsahuje otisk prstu manifestu souborů, které tvoří aplikaci a které je třeba stáhnout spolu s hash každého souboru. Soubory aplikace se předem načtou a ukládají do mezipaměti v prohlížeči.
Poznámka:
†In .NET 10 nebo novější soubor manifestu blazor.boot.json už neexistuje. Pokud upgradujete aplikaci, která spoléhá na soubor manifestu pro vlastní zpracování, doporučujeme shromažďovat informace přímo z sestavení.
Když Blazor WebAssembly stáhne spouštěcí soubory aplikace, dá prohlížeči pokyn, aby u odpovědí provedl kontroly integrity.
Blazor odesílá hodnoty hash SHA-256 pro knihovnu DLL (.dll), WebAssembly (.wasm) a další soubory. Hodnoty hash souborů v mezipaměti se porovnávají s hodnotami hash v konfiguraci spouštění. Prohlížeč vygeneruje chybu, pokud se nezdaří kontrola integrity staženého souboru.
Další informace najdete v následujících částech článku Základy: Statické soubory :
S výjimkou souboru manifestu spuštění Blazor, jsou běhové prostředí WebAssembly .NET spolu s soubory sady aplikací uloženy v mezipaměti na straně klienta. Konfigurace Blazor spouštění obsahuje manifest souborů, které tvoří aplikaci, která se musí stáhnout spolu s hodnotou hash obsahu souboru, který se používá ke zjištění, jestli se některé ze spouštěcích prostředků změnily. Blazor ukládá stažené soubory do mezipaměti pomocí rozhraní API mezipaměti prohlížeče.
Když Blazor WebAssembly stáhne spouštěcí soubory aplikace, dá prohlížeči pokyn, aby u odpovědí provedl kontroly integrity.
Blazor odesílá hodnoty hash SHA-256 pro knihovnu DLL (.dll), WebAssembly (.wasm) a další soubory v Blazor konfiguraci spouštění, které nejsou uloženy v mezipaměti klientů. Hodnoty hash souborů v mezipaměti se porovnávají s hodnotami hash v Blazor konfiguraci spouštění. U souborů uložených v mezipaměti s odpovídající hodnotou hash Blazor se používají tyto soubory. V opačném případě se ze serveru požadují soubory. Po stažení souboru se znovu zkontroluje jeho hodnota hash pro ověření integrity. Prohlížeč vygeneruje chybu, pokud se nezdaří kontrola integrity staženého souboru.
Blazoralgoritmus pro správu integrity souborů:
- Zajišťuje, že aplikace nezpůsobí riziko načtení nekonzistentní sady souborů, například pokud je na webový server nasazena nová verze, zatímco uživatel právě stahuje soubory aplikace. Nekonzistentní soubory můžou vést k nesprávné aplikaci.
- Zajišťuje, aby prohlížeč uživatele nikdy neukládal nekonzistentní nebo neplatné odpovědi serveru, což může zabránit spuštění aplikace, přestože uživatel stránku zkusí aktualizovat ručně.
- Zajistí bezpečnost ukládání odpovědí do mezipaměti a nezkontroluje změny na straně serveru, dokud se očekávané hodnoty hash SHA-256 nezmění, takže následné načtení stránky zahrnuje méně požadavků a dokončí se rychleji.
Pokud webový server vrátí odpovědi, které neodpovídají očekávaným hodnotám hash SHA-256, zobrazí se v konzole pro vývojáře prohlížeče chyba podobná následujícímu příkladu:
Nepodařilo se najít platný digest v atributu 'integrity' pro prostředek 'https://myapp.example.com/_framework/MyBlazorApp.dll' s vypočítanou integritou SHA-256 'IIa70iwvmEg5WiDV17OpQ5eCztNYqL186J56852RpJY='. Prostředek je zablokovaný.
Ve většině případů upozornění neoznačuje problém s kontrolou integrity. Místo toho upozornění obvykle znamená, že existuje nějaký jiný problém.
Blazor WebAssemblyReferenční zdroj spouštění najdete Boot.WebAssembly.ts v souboru v dotnet/aspnetcore úložišti GitHub.
Poznámka:
Odkazy na referenční zdroj .NET v dokumentaci obvykle otevřou výchozí větev úložiště, která představuje aktuální vývoj další verze .NET. Chcete-li vybrat značku pro konkrétní vydání, použijte rozbalovací nabídku Přepnout větve nebo značky. Další informace najdete v tématu Jak vybrat značku verze zdrojového kódu ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Diagnostikovat problémy s integritou
Když je aplikace sestavená, vygenerovaný spouštěcí manifest popisuje hodnoty hash SHA-256 spouštěcích prostředků v době vytvoření výstupu sestavení. Kontrola integrity projde tak dlouho, dokud hodnoty hash SHA-256 v manifestu spouštění odpovídají souborům doručeným do prohlížeče.
Mezi běžné důvody selhání patří:
- Odpověď webového serveru je chyba (například 404 – Nenalezena nebo 500 – Vnitřní chyba serveru) místo požadovaného souboru v prohlížeči. Prohlížeč ho hlásí jako selhání kontroly integrity, a ne jako selhání odpovědi.
- Něco změnilo obsah souborů mezi sestavením a doručením souborů do prohlížeče. Může k tomu dojít:
- Pokud vy nebo nástroje k sestavení ručně upravujete výstup sestavení.
- Pokud některé aspekty procesu nasazení změnily soubory. Pokud například používáte mechanismus nasazení založený na Gitu, mějte na paměti, že Git transparentně převádí konce čar ve stylu Windows na konce čar ve stylu Unix, pokud potvrdíte soubory ve Windows a zkontrolujete je v Linuxu. Změna konce řádku souboru změní hodnoty hash SHA-256. Pokud se chcete tomuto problému vyhnout, zvažte použití
.gitattributesk tomu, abyste zpracovali artefakty sestavení jakobinarysoubory. - Webový server upraví obsah souboru jako součást jejich poskytování. Například některé distribuční sítě obsahu (CDN) se automaticky pokusí minifikovat KÓD HTML, čímž ho upraví. Tyto funkce možná budete muset zakázat.
- Manifest spuštění se nenačte správně nebo je nesprávně uložen v mezipaměti klienta. Mezi běžné příčiny patří:
- Chybná konfigurace nebo selhání vlastního vývojářského kódu
- Jedna nebo více chybně nakonfigurovaných mezilehlých vrstev ukládání do mezipaměti
Pokud chcete diagnostikovat, které z těchto možností platí ve vašem případě:
- Všimněte si, který soubor chybu aktivuje, čtením chybové zprávy.
- Otevřete vývojářské nástroje prohlížeče a podívejte se na kartu Síť . V případě potřeby stránku znovu načtěte, aby se zobrazil seznam požadavků a odpovědí. Najděte soubor, který v seznamu aktivuje chybu.
- Zkontrolujte stavový kód HTTP v odpovědi. Pokud server vrátí cokoli jiného než 200 – OK (nebo jiný stavový kód 2xx), máte k diagnostice problém na straně serveru. Stavový kód 403 například znamená problém s autorizací, zatímco stavový kód 500 znamená, že server selhává způsobem, který není zadaný. Pokud chcete diagnostikovat a opravit aplikaci, projděte si protokoly na straně serveru.
- Pokud je stavový kód 200 – OK prostředku, podívejte se na obsah odpovědi v vývojářských nástrojích prohlížeče a zkontrolujte, jestli obsah odpovídá očekávaným datům. Běžným problémem je například chybné konfigurace směrování tak, aby žádosti vracely vaše
index.htmldata i pro jiné soubory. Ujistěte se, že odpovědi na.wasmpožadavky jsou binární soubory WebAssembly a že odpovědi na.dllpožadavky jsou binární soubory sestavení .NET. Pokud ne, máte problém se směrováním na straně serveru, který je třeba diagnostikovat.
- Všimněte si, který soubor chybu aktivuje, čtením chybové zprávy.
- Otevřete vývojářské nástroje prohlížeče a podívejte se na kartu Síť . V případě potřeby stránku znovu načtěte, aby se zobrazil seznam požadavků a odpovědí. Najděte soubor, který v seznamu aktivuje chybu.
- Zkontrolujte stavový kód HTTP v odpovědi. Pokud server vrátí cokoli jiného než 200 – OK (nebo jiný stavový kód 2xx), máte k diagnostice problém na straně serveru. Stavový kód 403 například znamená problém s autorizací, zatímco stavový kód 500 znamená, že server selhává způsobem, který není zadaný. Pokud chcete diagnostikovat a opravit aplikaci, projděte si protokoly na straně serveru.
- Pokud je stavový kód 200 – OK prostředku, podívejte se na obsah odpovědi v vývojářských nástrojích prohlížeče a zkontrolujte, jestli obsah odpovídá očekávaným datům. Běžným problémem je například chybné konfigurace směrování tak, aby žádosti vracely vaše
index.htmldata i pro jiné soubory. Ujistěte se, že odpovědi na.wasmpožadavky jsou binární soubory WebAssembly a že odpovědi na.dllpožadavky jsou binární soubory sestavení .NET. Pokud ne, máte problém se směrováním na straně serveru, který je třeba diagnostikovat. - Pomocí skriptu PowerShellu pro řešení potíží s integritou vyhledejte publikovaný a nasazený výstup aplikace.
Pokud potvrdíte, že server vrací důvěryhodně správná data, mezi sestavením a doručením souboru musí být něco jiného, co upravuje obsah. K prošetření tohoto:
- Prozkoumejte sadu nástrojů sestavení a mechanismus nasazení v případě, že po sestavení souborů upravují soubory. Příkladem je, když Git transformuje konce řádků souboru, jak je popsáno výše.
- Zkontrolujte konfiguraci webového serveru nebo CDN v případě, že jsou nastavené tak, aby dynamicky upravovali odpovědi (například při pokusu o minifikaci KÓDU HTML). Je v pořádku, když webový server implementuje kompresi HTTP (například vrací
content-encoding: brnebocontent-encoding: gzip), protože to nemá vliv na výsledek po dekompresi. Není v pořádku, aby webový server upravil nekomprimovaná data.
Řešení potíží se skriptem PowerShellu pro integritu
Pomocí skriptu PowerShellu integrity.ps1 ověřte publikovanou a nasazenou Blazor aplikaci. Skript se poskytuje pro PowerShell Core 7 nebo novější jako výchozí bod, když má aplikace problémy s integritou, které Blazor architektura nedokáže identifikovat. Přizpůsobení skriptu může být vyžadováno pro vaše aplikace, včetně toho, jestli běží ve verzi PowerShellu novější než verze 7.2.0.
Skript zkontroluje soubory ve složce publish stažené z nasazené aplikace, aby zjistil problémy v různých manifestech, které obsahují hash integrity. Tyto kontroly by měly detekovat nejběžnější problémy:
- Upravili jste soubor v publikovaném výstupu, aniž byste si ho uvědomili.
- Aplikace nebyla správně nasazená do cíle nasazení nebo se v prostředí cíle nasazení změnila.
- Mezi nasazenou aplikací a výstupem publikování aplikace existují rozdíly.
V příkazovém prostředí PowerShellu spusťte skript pomocí následujícího příkazu:
.\integrity.ps1 {BASE URL} {PUBLISH OUTPUT FOLDER}
V následujícím příkladu se skript spustí v místně spuštěné aplikaci na https://localhost:5001/adrese:
.\integrity.ps1 https://localhost:5001/ C:\TestApps\BlazorSample\bin\Release\net6.0\publish\
Zástupné znaky:
-
{BASE URL}: Adresa URL nasazené aplikace. Je vyžadováno koncové lomítko (/). -
{PUBLISH OUTPUT FOLDER}: Cesta ke složce nebo umístění aplikacepublish, kde je aplikace publikovaná pro nasazení.
Poznámka:
Při klonování dotnet/AspNetCore.Docs úložiště integrity.ps1 GitHub může skript umístit do karantény Bitdefender nebo jiný virový skener, který je v systému. Soubor je obvykle zachycen heuristickým skenovací technologií antivirového skeneru, který pouze hledá vzory v souborech, které by mohly znamenat přítomnost malwaru. Před klonováním úložiště přidejte do virového skeneru výjimku, abyste zabránili, aby virový skener umístil soubor do karantény. Následující příklad představuje typickou cestu ke skriptu v systému Windows. Upravte cestu podle potřeby pro jiné systémy. Zástupný symbol {USER} je segment cesty uživatele.
C:\Users\{USER}\Documents\GitHub\AspNetCore.Docs\aspnetcore\blazor\host-and-deploy\webassembly\_samples\integrity.ps1
Upozornění: Vytváření výjimek antivirového skeneru je nebezpečné a mělo by se provést pouze v případě, že jste si jisti, že je soubor bezpečný.
Porovnání kontrolního součtu souboru s platnou hodnotou kontrolního součtu nezaručuje bezpečnost souborů, ale úprava souboru způsobem, který udržuje hodnotu kontrolního součtu, není pro uživatele se zlými úmysly triviální. Kontrolní součty jsou proto užitečné jako obecný přístup k zabezpečení. Porovnejte kontrolní součet místního integrity.ps1 souboru s jednou z následujících hodnot:
- SHA256:
32c24cb667d79a701135cb72f6bae490d81703323f61b8af2c7e5e5dc0f0c2bb - MD5:
9cee7d7ec86ee809a329b5406fbf21a8
Pomocí následujícího příkazu získejte kontrolní součet souboru v operačním systému Windows. Zadejte cestu a název souboru pro zástupný symbol {PATH AND FILE NAME} a uveďte typ kontrolního součtu, který se má vytvořit pro zástupný symbol {SHA512|MD5}, buď SHA256 nebo MD5:
CertUtil -hashfile {PATH AND FILE NAME} {SHA256|MD5}
Pokud máte nějaké obavy, že ověření kontrolního součtu není ve vašem prostředí dostatečně zabezpečené, projděte si pokyny ve vedení vaší organizace v oblasti zabezpečení.
Další informace naleznete v tématu Přehled ochrany před hrozbami pomocí antivirové ochrany v programu Microsoft Defender.
Zakázání kontroly integrity pro aplikace bez PWA
Ve většině případů nezakazujte kontrolu integrity. Zakázání kontroly integrity nevyřeší základní problém, který způsobil neočekávané odpovědi a výsledkem je ztráta dříve uvedených výhod.
V případech, kdy se webový server nedá spoléhat na vrácení konzistentních odpovědí a nemáte na výběr, ale dočasně zakázat kontroly integrity, dokud se nevyřeší základní problém.
Pokud chcete zakázat kontroly integrity, ručně načtěte spouštěcí prostředky na straně klienta a vyhněte se předání integrity parametru volání fetch .
Pokud chcete zakázat kontroly integrity, přidejte následující položky do skupiny vlastností v Blazor WebAssembly souboru projektu aplikace (.csproj):
<BlazorCacheBootResources>false</BlazorCacheBootResources>
BlazorCacheBootResources také deaktivuje výchozí chování Blazor ukládání do mezipaměti .dll, .wasm a dalších souborů na základě jejich hash SHA-256, protože vlastnost oznamuje, že hodnoty hash SHA-256 nejsou spolehlivé z hlediska správnosti. I při tomto nastavení může normální mezipaměť HTTP prohlížeče tyto soubory ukládat do mezipaměti, ale to, jestli k tomu dojde, závisí na konfiguraci webového serveru a cache-control hlavičkách, které slouží.
Poznámka:
Tato BlazorCacheBootResources vlastnost nezakazuje kontroly integrity progresivních webových aplikací (PWA). Pokyny týkající se PWA najdete v části Zakázání kontroly integrity aplikace PWA .
Nemůžeme poskytnout úplný seznam scénářů, ve kterých je vyžadováno deaktivování kontroly integrity. Servery můžou odpovědět na požadavek libovolným způsobem mimo rozsah Blazor architektury. Architektura umožňuje předchozímu přístupu, aby aplikace běžela za cenu ztráty záruky integrity, kterou může aplikace poskytnout. Opět nedoporučujeme zakázat kontrolu integrity, zejména pro produkční nasazení. Vývojáři by se měli snažit vyřešit základní problém integrity, který způsobuje selhání kontroly integrity.
Mezi obecné případy, které můžou způsobit problémy s integritou, patří:
- Běží na HTTP, kde nelze zkontrolovat integritu.
- Pokud proces nasazení změní soubory po publikování jakýmkoli způsobem.
- Pokud váš hostitel soubory nějakým způsobem upraví.
Zakázání kontroly integrity pro PWA
BlazorŠablona progresivní webové aplikace (PWA) obsahuje navrhovaný service-worker.published.js soubor, který je zodpovědný za načítání a ukládání souborů aplikací pro offline použití. Jedná se o samostatný proces od normálního spouštěcího mechanismu aplikace a má vlastní samostatnou logiku kontroly integrity.
service-worker.published.js Uvnitř souboru je k dispozici následující řádek:
.map(asset => new Request(asset.url, { integrity: asset.hash }));
Chcete-li zakázat kontrolu integrity, odeberte integrity parametr změnou řádku na následující:
.map(asset => new Request(asset.url));
Zákaz kontroly integrity opět znamená, že ztratíte bezpečnostní záruky nabízené kontrolou integrity. Existuje například riziko, že pokud prohlížeč uživatele ukládá aplikaci do mezipaměti v přesně okamžiku, kdy nasadíte novou verzi, může ukládat některé soubory ze starého nasazení do mezipaměti a některé z nových nasazení. Pokud k tomu dojde, aplikace se zasekne v nefunkčním stavu, dokud nenasadíte další aktualizaci.