Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Ez a cikk ismerteti az eszközök gyorsítótárazását Blazor WebAssembly , valamint az integritási hibák diagnosztizálását és megoldását.
Amikor egy Blazor WebAssembly alkalmazás betöltődik a böngészőben, az alkalmazás letölti a rendszerindító erőforrásokat a kiszolgálóról:
- JavaScript-kód az alkalmazás elindításához
- .NET-futtatókörnyezet és összetevők
- Helyspecifikus adatok
A Blazor rendszerindítási konfiguráció, amely be van ágyazva dotnet.js, tartalmazza az alkalmazást alkotó fájlok ujjlenyomattal ellátott jegyzékét, valamint az egyes fájlok tartalmának kivonatát. Az alkalmazás fájljait a böngésző előre betölti és gyorsítótárazza.
Megjegyzés
† .NET 10 vagy újabb verziójában a blazor.boot.json jegyzékfájl már nem található. Ha olyan alkalmazást frissít, amely a jegyzékfájlra támaszkodik egyéni feldolgozásra, javasoljuk, hogy közvetlenül a buildből gyűjtse össze az információkat.
Amikor Blazor WebAssembly letölti az alkalmazás indítási fájljait, arra utasítja a böngészőt, hogy végezzen integritás-ellenőrzéseket a válaszokon.
Blazor SHA-256 kivonatértékeket küld a DLL(.dll), a WebAssembly (.wasm) és más fájlok számára. A gyorsítótárazott fájlok fájlkivonatai a rendszerindítási konfigurációban lévő kivonatokkal vannak összehasonlítva. A böngésző hibát okoz, ha valamelyik letöltött fájl integritás-ellenőrzése sikertelen.
További információkért tekintse meg az Alapok: Statikus fájlok című cikk alábbi szakaszait:
A rendszerindítási Blazor jegyzékfájl (blazor.boot.json) kivételével a WebAssembly .NET-futtatókörnyezetet és az alkalmazáscsomagfájlokat gyorsítótárazza a klienseken. A Blazor rendszerindítási konfiguráció tartalmazza az alkalmazást alkotó fájlok jegyzékfájlját, valamint a fájl tartalmának kivonatát, amely alapján megállapíthatja, hogy a rendszerindítási erőforrások bármelyike módosult-e.
Blazor gyorsítótárazza a letöltött fájlokat a böngésző Cache API-jának használatával.
Amikor Blazor WebAssembly letölti az alkalmazás indítási fájljait, arra utasítja a böngészőt, hogy végezzen integritás-ellenőrzéseket a válaszokon.
BlazorSHA-256 kivonatértékeket küld a DLL(), a WebAssembly (.dll.wasm) és a Blazor rendszerindítási konfigurációban lévő egyéb fájlok számára, amelyek nem gyorsítótárazva vannak az ügyfeleken. A gyorsítótárazott fájlok fájlkivonatai a rendszerindítási konfigurációban lévő Blazor kivonatokkal vannak összehasonlítva. Az egyező kivonatot tartalmazó gyorsítótárazott fájlok esetében Blazor a gyorsítótárazott fájlokat használja. Ellenkező esetben a rendszer fájlokat kér a kiszolgálótól. A fájl letöltése után a rendszer ismét ellenőrzi a kivonatot az integritás ellenőrzéséhez. A böngésző hibát okoz, ha valamelyik letöltött fájl integritás-ellenőrzése sikertelen.
Blazor's algoritmus a fájlintegritás kezelésére:
- Biztosítja, hogy az alkalmazás ne veszélyezhesse a fájlok inkonzisztens készletének betöltését, például ha a webkiszolgálóra új üzembe helyezést alkalmaz, miközben a felhasználó éppen tölti le az alkalmazásfájlokat. Az inkonzisztens fájlok hibás alkalmazáshoz vezethetnek.
- Biztosítja, hogy a felhasználó böngészője soha ne gyorsítótárazza az inkonzisztens vagy érvénytelen válaszokat, ami megakadályozhatja, hogy az alkalmazás elinduljon még akkor is, ha a felhasználó manuálisan frissíti az oldalt.
- Biztonságossá teszi a válaszok gyorsítótáraztatását, és nem ellenőrzi a kiszolgálóoldali módosításokat, amíg maguk a várt SHA-256 kivonatok nem változnak, így a további oldalbetöltések kevesebb kérést igényelnek, és gyorsabban befejeződnek.
Ha a webkiszolgáló olyan válaszokat ad vissza, amelyek nem felelnek meg a várt SHA-256 kivonatoknak, az alábbi példához hasonló hiba jelenik meg a böngésző fejlesztői konzolján:
Nem sikerült érvényes kivonatot találni az 'https://myapp.example.com/_framework/MyBlazorApp.dll' erőforrás 'integritás' attribútumában a számított SHA-256 integritással: 'IIa70iwvmEg5WiDV17OpQ5eCztNYqL186J56852RpJY='. Az erőforrás le lett tiltva.
A legtöbb esetben a figyelmeztetés nem jelez integritás-ellenőrzéssel kapcsolatos problémát. Ehelyett a figyelmeztetés általában azt jelenti, hogy más probléma is létezik.
A Blazor WebAssembly rendszerindítási referenciaforrásához lásd a Boot.WebAssembly.ts fájlt a dotnet/aspnetcore GitHub-adattárban.
Megjegyzés
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Ha ki szeretne jelölni egy címkét egy adott kiadáshoz, használja az Ágak vagy címkék váltása legördülő listát. További információ : A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Integritási problémák diagnosztizálása
Az alkalmazás létrehozásakor a létrehozott rendszerindítási jegyzék leírja a rendszerindítási erőforrások SHA-256 kivonatait a build kimenetének létrehozásakor. Az integritás-ellenőrzés addig tart, amíg az SHA-256 kivonatok a rendszerindítási jegyzékben megegyeznek a böngészőbe kézbesített fájlokkal.
A sikertelenség gyakori okai a következők:
- A webkiszolgáló válasza hiba (például 404 – Nem található vagy 500 belső kiszolgálóhiba) a böngésző által kért fájl helyett. Ezt a böngésző nem válaszhibaként, hanem integritásellenőrzési hibaként jelenti.
- Valami megváltoztatta a fájlok tartalmát a fájlok összeállítása és a böngészőbe való kézbesítése között. Ez a következő esetekben fordulhat elő:
- Ha ön vagy a buildelési eszközök manuálisan módosítják a build kimenetét.
- Ha az üzembe helyezési folyamat egy része módosította a fájlokat. Ha például Egy Git-alapú üzembehelyezési mechanizmust használ, vegye figyelembe, hogy a Git transzparens módon alakítja át a Windows-stílusú vonalvégződéseket Unix-stílusú sorvégződésekké, ha fájlokat véglegesít a Windowson, és kijelentkezik a Linuxon. A fájlsorvégződések módosítása megváltoztatja az SHA-256 kivonatokat. A probléma elkerülése érdekében fontolja meg
.a build-artifaktumok fájlokként való kezelését - A webkiszolgáló a szolgáltatás részeként módosítja a fájl tartalmát. Egyes tartalomterjesztési hálózatok (CDN-ek) például automatikusan megpróbálják minimalizálni a HTML-t, ezáltal módosítják azt. Előfordulhat, hogy le kell tiltania az ilyen funkciókat.
- A rendszerindítási jegyzék nem töltődik be megfelelően, vagy nem megfelelően van gyorsítótárazva az ügyfélen. A gyakori okok közé tartoznak a következők:
- Helytelenül konfigurált vagy hibásan működő egyéni fejlesztői kód.
- Egy vagy több helytelenül konfigurált köztes gyorsítótár réteg.
Annak diagnosztizálásához, hogy ezek közül melyik vonatkozik az Ön esetében:
- Figyelje meg, hogy melyik fájl aktiválja a hibát a hibaüzenet elolvasásával.
- Nyissa meg a böngésző fejlesztői eszközeit, és keresse meg a Hálózat lapot. Szükség esetén töltse be újra a lapot a kérések és válaszok listájának megtekintéséhez. Keresse meg a listában a hibát kiváltó fájlt.
- Ellenőrizze a HTTP-állapotkódot a válaszban. Ha a kiszolgáló a 200 - OK (vagy egy másik 2xx állapotkód) kivételével bármit visszaad, akkor a kiszolgálóoldali problémát kell diagnosztizálnia. A 403-ás állapotkód például azt jelenti, hogy engedélyezési probléma van, míg az 500-ás állapotkód azt jelenti, hogy a kiszolgáló nem meghatározott módon meghiúsul. Az alkalmazás diagnosztizálásához és javításához tekintse meg a kiszolgálóoldali naplókat.
- Ha az állapotkód 200 – OK az erőforráshoz, tekintse meg a böngésző fejlesztői eszközeinek választartalmat, és ellenőrizze, hogy a tartalom megfelel-e a várt adatoknak. Például gyakori probléma az útválasztás helytelen konfigurálása, így a kérések más fájlok esetében is visszaadják a
index.htmladatokat. Győződjön meg arról, hogy a.wasmkérelmekre adott válaszok WebAssembly bináris fájlok, és hogy a.dllkérelmekre adott válaszok .NET-szerelvény bináris fájlok. Ha nem, akkor a kiszolgálóoldali útválasztási problémát diagnosztizálni kell.
- Figyelje meg, hogy melyik fájl aktiválja a hibát a hibaüzenet elolvasásával.
- Nyissa meg a böngésző fejlesztői eszközeit, és keresse meg a Hálózat lapot. Szükség esetén töltse be újra a lapot a kérések és válaszok listájának megtekintéséhez. Keresse meg a listában a hibát kiváltó fájlt.
- Ellenőrizze a HTTP-állapotkódot a válaszban. Ha a kiszolgáló a 200 - OK (vagy egy másik 2xx állapotkód) kivételével bármit visszaad, akkor a kiszolgálóoldali problémát kell diagnosztizálnia. A 403-ás állapotkód például azt jelenti, hogy engedélyezési probléma van, míg az 500-ás állapotkód azt jelenti, hogy a kiszolgáló nem meghatározott módon meghiúsul. Az alkalmazás diagnosztizálásához és javításához tekintse meg a kiszolgálóoldali naplókat.
- Ha az állapotkód 200 – OK az erőforráshoz, tekintse meg a böngésző fejlesztői eszközeinek választartalmat, és ellenőrizze, hogy a tartalom megfelel-e a várt adatoknak. Például gyakori probléma az útválasztás helytelen konfigurálása, így a kérések más fájlok esetében is visszaadják a
index.htmladatokat. Győződjön meg arról, hogy a.wasmkérelmekre adott válaszok WebAssembly bináris fájlok, és hogy a.dllkérelmekre adott válaszok .NET-szerelvény bináris fájlok. Ha nem, akkor a kiszolgálóoldali útválasztási problémát diagnosztizálni kell. - Ellenőrizze az alkalmazás közzétett és üzembe helyezett kimenetét az integritási hibák elhárítása PowerShell-szkripttel.
Ha meggyőződik arról, hogy a kiszolgáló helyes adatokat ad vissza, a fájl összeállítása és kézbesítése között más módon kell módosítani a tartalmat. Ennek kivizsgálása:
- Vizsgálja meg a buildelési eszközláncot és az üzembehelyezési mechanizmust abban az esetben, ha a fájlok létrehozása után módosítják a fájlokat. Erre példa az, amikor a Git átalakítja a fájlsorvégződéseket a korábban ismertetett módon.
- Vizsgálja meg a webkiszolgáló vagy a CDN konfigurációját abban az esetben, ha a válaszok dinamikus módosítására vannak beállítva (például a HTML minimalizálása). A webkiszolgálónak nem árt HTTP-tömörítést implementálnia (például
content-encoding: brvagycontent-encoding: gzipvisszaadni), mivel ez nem befolyásolja a dekompresszió utáni eredményt. A tömörítetlen adatok módosítása azonban nem megfelelő a webkiszolgáló számára.
Integritási PowerShell-szkript hibaelhárítása
A integrity.ps1 PowerShell-szkripttel ellenőrizheti a közzétett és üzembe helyezett Blazor-alkalmazásokat. A szkript a PowerShell Core 7-hez vagy újabb verzióhoz érhető el kiindulópontként, ha az alkalmazás olyan integritási problémákkal rendelkezik, amelyeket a Blazor-keretrendszer nem tud azonosítani. Előfordulhat, hogy a szkript testreszabása szükséges az alkalmazásokhoz, például ha a PowerShell 7.2.0-s verziójánál később fut.
A szkript ellenőrzi a publish mappában lévő fájlokat, és letölti az üzembe helyezett alkalmazásból, hogy észlelje az integritáskivonatokat tartalmazó különböző jegyzékekben szereplő problémákat. Ezeknek az ellenőrzéseknek a leggyakoribb problémákat kell észlelnie:
- A közzétett kimenetben lévő fájlt anélkül módosította, hogy felismerte volna.
- Az alkalmazás nem lett megfelelően üzembe helyezve az üzembe helyezési célhelyen, vagy valami megváltozott az üzembehelyezési cél környezetében.
- Az üzembe helyezett alkalmazás és az alkalmazás közzétételének kimenete között különbségek vannak.
A szkript meghívása a következő paranccsal egy PowerShell-parancshéjban:
.\integrity.ps1 {BASE URL} {PUBLISH OUTPUT FOLDER}
Az alábbi példában a szkript végrehajtása helyileg futó alkalmazáson történik https://localhost:5001/:
.\integrity.ps1 https://localhost:5001/ C:\TestApps\BlazorSample\bin\Release\net6.0\publish\
Helykitöltők
-
{BASE URL}: Az üzembe helyezett alkalmazás URL-címe. Záró perjelre (/) van szükség. -
{PUBLISH OUTPUT FOLDER}: Az alkalmazáspublishmappájának vagy helyének elérési útja, ahol az alkalmazás üzembe helyezés céljából közzé van téve.
Megjegyzés
A GitHub-adattár klónozása dotnet/AspNetCore.Docs esetén előfordulhat, hogy a integrity.ps1 szkriptet a Bitdefender vagy egy másik, a rendszeren található vírusolvasó karanténba helyezi. A fájlt általában egy vírusolvasó heurisztikus vizsgálati technológiája csapdába ejti, amely csupán olyan mintákat keres a fájlokban, amelyek kártevők jelenlétét jelezhetik. Ha meg szeretné akadályozni, hogy a vírusszkenner karanténba helyezze a fájlt, adjon hozzá kivételt a vírusszkennerhez az adattár klónozása előtt. Az alábbi példa egy windowsos rendszer szkriptjének tipikus elérési útja. Módosítsa az elérési utat szükség szerint más rendszerekre. A {USER} helyőrző a felhasználó elérési út szegmense.
C:\Users\{USER}\Documents\GitHub\AspNetCore.Docs\aspnetcore\blazor\host-and-deploy\webassembly\_samples\integrity.ps1
Figyelmeztetés: A vírusolvasó kivételeinek létrehozása veszélyes, és csak akkor szabad végrehajtani, ha biztos benne, hogy a fájl biztonságos.
A fájlok ellenőrzőösszegének egy érvényes ellenőrzőösszeg-értékhez való összehasonlítása nem garantálja a fájlok biztonságát, de a fájlok olyan módon történő módosítása, amely fenntartja az ellenőrzőösszeg értékét, nem triviális a rosszindulatú felhasználók számára. Ezért az ellenőrzőösszegek általános biztonsági megoldásként hasznosak. Hasonlítsa össze a helyi integrity.ps1 fájl ellenőrzőösszegét az alábbi értékek egyikével:
- SHA256:
32c24cb667d79a701135cb72f6bae490d81703323f61b8af2c7e5e5dc0f0c2bb - MD5:
9cee7d7ec86ee809a329b5406fbf21a8
Szerezze be a fájl ellenőrzőösszegét Windows operációs rendszeren az alábbi paranccsal. Adja meg a {PATH AND FILE NAME} helyőrző elérési útját és fájlnevét, és adja meg a {SHA512|MD5} helyőrzőhöz létrehozandó ellenőrzőösszeg típusát, SHA256 vagy MD5:
CertUtil -hashfile {PATH AND FILE NAME} {SHA256|MD5}
Ha aggódik amiatt, hogy az ellenőrzőösszeg-ellenőrzés nem elég biztonságos az ön környezetében, útmutatásért forduljon a szervezet biztonsági vezetéséhez.
További információ: A Microsoft Defender víruskereső fenyegetésvédelmének áttekintése.
Nem PWA-alkalmazások integritás-ellenőrzésének letiltása
A legtöbb esetben ne tiltsa le az integritás-ellenőrzést. Az integritás-ellenőrzés letiltása nem oldja meg azt a problémát, amely a váratlan válaszokat okozta, és a korábban felsorolt előnyök elvesztését eredményezi.
Előfordulhatnak olyan esetek, amikor a webkiszolgálóra nem lehet megbízható válaszok visszaküldésére támaszkodni, és nincs más lehetőség, mint ideiglenesen letiltani az integritás-ellenőrzéseket, amíg az alapul szolgáló probléma meg nem oldódik.
Az integritás-ellenőrzések letiltásához manuálisan töltse be az ügyféloldali rendszerindítási erőforrásokat , és ne adja át a integrity paramétert a fetch hívásnak.
Az integritás-ellenőrzések letiltásához adja hozzá a következőket egy tulajdonságcsoporthoz az Blazor WebAssembly alkalmazás projektfájljában (.csproj):
<BlazorCacheBootResources>false</BlazorCacheBootResources>
BlazorCacheBootResources emellett letiltja Blazor.dll, .wasmés más fájlok sha-256-kivonatok alapján történő gyorsítótárazásának alapértelmezett viselkedését, mert a tulajdonság azt jelzi, hogy az SHA-256 kivonatok nem támaszkodhatnak a helyességre. Még ebben a beállításban is előfordulhat, hogy a böngésző normál HTTP-gyorsítótára gyorsítótárazza ezeket a fájlokat, de ez a webkiszolgáló konfigurációjától és az általa kiszolgált cache-control fejléctől függ.
Megjegyzés
A BlazorCacheBootResources tulajdonság nem tiltja le a progresszív webalkalmazások (PWA-k) integritás-ellenőrzését. A PWA-kkal kapcsolatos útmutatásért tekintse meg a PWA-k integritás-ellenőrzésének letiltása című szakaszt .
Nem tudunk részletes listát adni azokról a forgatókönyvekről, ahol az integritás-ellenőrzés letiltása szükséges. A kiszolgálók a Blazor keretrendszer hatókörén kívül tetszőleges módon válaszolhatnak a kérésre. A keretrendszer lehetővé teszi, hogy az előző megközelítés lehetővé tegye az alkalmazás futtathatóvá tétele az alkalmazás által biztosított integritási garancia elvesztésének árán. Ismét nem javasoljuk az integritás-ellenőrzés letiltását, különösen a működési környezetekben. A fejlesztőknek meg kell oldaniuk a mögöttes integritási problémát, amely az integritás-ellenőrzés sikertelenségét okozza.
Néhány általános eset, amely integritási problémákat okozhat:
- HTTP-n fut, ahol az integritás nem ellenőrizhető.
- Ha az üzembehelyezési folyamat bármilyen módon módosítja a fájlokat a közzététel után.
- Ha a szerver bármilyen módon módosítja a fájlokat.
A PWA-k integritás-ellenőrzésének letiltása
BlazorProgresszív webalkalmazás (PWA) sablonja egy javasolt service-worker.published.js fájlt tartalmaz, amely az alkalmazásfájlok offline használatra való lekéréséért és tárolásáért felelős. Ez egy külön folyamat a normál alkalmazásindítási mechanizmustól, és külön integritás-ellenőrzési logikával rendelkezik.
A service-worker.published.js fájlban a következő sor jelenik meg:
.map(asset => new Request(asset.url, { integrity: asset.hash }));
Az integritás-ellenőrzés letiltásához távolítsa el a integrity paramétert a sor alábbira módosításával:
.map(asset => new Request(asset.url));
Az integritás-ellenőrzés letiltása azt jelenti, hogy elveszíti az integritás-ellenőrzés által biztosított biztonsági garanciákat. Fennáll például a veszélye annak, hogy ha a felhasználó böngészője éppen az új verzió üzembe helyezésének pillanatában gyorsítótárazza az alkalmazást, az gyorsítótárazhat bizonyos fájlokat a régi telepítésből, néhányat pedig az új üzembe helyezésből. Ha ez történik, az alkalmazás hibás állapotba kerül, amíg egy további frissítést nem helyez üzembe.