|
|
Zverejnené 20. 2. 2021 19:57:29
|
|
|
|

Aby sa zabránilo útokom CSRF, asp.net mvc poskytuje funkciu proti falšovaniu útokov ValidateAntiForgeryToken a v novej verzii jadrového frameworku asp.net Microsoft poskytuje funkciu AutoValidateAntiforgeryToken, konkrétne ValidateAntiForgeryToken a AutoValidateAntiforgeryToken Aký je rozdiel, tento článok podrobne vysvetlí.
Koncept CSRF
CSRF Cross-Site Request Forgery, podobne ako XSS útoky, je mimoriadne škodlivý, môžete to pochopiť takto: útočník ukradne vašu identitu a pošle škodlivú požiadavku na vaše meno, ktorá je pre server úplne legitímna, ale vykoná akciu, ktorú útočník očakáva, ako je posielanie e-mailov a správ na vaše meno, krádež účtu, pridanie správcov systému alebo dokonca nákup tovaru, Virtuálne prevody meny a podobne. Web A je webová stránka s zraniteľnosťou CSRF, Web B je škodlivá webová stránka vytvorená útočníkom a používateľ C je legitímnym používateľom webu A.
ASP.NET MVC proti útokom CSRF
Na stránke zobrazenia použite @Html.AntiForgeryToken() na pridanie tagu a keď používateľ pristúpi na stránku, backend automaticky vygeneruje skrytý html kód s týmto tagom, nasledovne:
<vstupné meno="__RequestVerificationToken" typ="skryté" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> Pozadie ovládača musí byť nastavené [ValidateAntiForgeryToken] funkcia na zabránenie falšovania formulárov.
ValidateAntiForgeryToken a AutoValidateAntiforgeryToken sú odlišné
AutoValidateAntiforgeryTokenAuthorizationFilter dedí ValidateAntiforgeryTokenAuthorizationFilter, ale prepíše v ňom len metódu ShouldValidate.
Vlastnosť AutoValidateAntiforgeryToken, ktorá umožňuje overovanie tokenov proti falšovaniu pre všetky nebezpečné HTTP metódy.HTTP metódy okrem GET, HEAD, OPTIONS a TRACE všetky vyžadujú token proti falšovaniu。 Toto môže byť použité ako globálny filter na spustenie validácie tokenov proti falšovaniu v aplikácii v predvolenom nastavení.
Prihlásenie na hypertextový odkaz je viditeľné.
AutoValidateAntiforgeryTokenAttribute overuje volanie na AutoValidateAntiforgeryTokenAuthorizationFilter, ktoré dedí z ValidateAntiforgeryTokenAuthorizationFilter,Metóda ShouldValidate bola prepísaná, vrátenie true znamená, že je potrebné overiť, a vrátenie false nebude validované, ako je znázornené na obrázku nižšie:
Analyzujte zdrojový kód:
AutoValidateAntiforgeryTokenAttribute umožňuje globálne aplikovať overenie tokenov proti falšovaniu na všetky nezabezpečené metódy, ako sú POST, PUT, PATCH a DELETE. Takže nemusíte pridávať vlastnosť [ValidateAntiForgeryToken] ku každej akcii, ktorá ju vyžaduje.
Na jeho použitie pridajte nasledujúci kód do metódy Startup vo vašom ConfigureServices:
Ak potrebujete ignorovať anti-falšovateľskú autentifikáciu, môžete pridať [IgnoreAntiforgeryTokenpripísať to akcii.
Niekedy sa môže stať, že budete musieť označiť viacero požiadaviek na kontroléri, zatiaľ čo niektoré požiadavky nie je potrebné falšovať, napríklad rôzne operácie založené na GET. Existuje niekoľko nástrojov, ktoré môžete použiť, aby bol proces pohodlnejší a pohodlnejší. Prvou je vlastnosť AutoValidateAntiforgeryToken. Správa sa ako vlastnosť ValidateAntiForgeryToken. Avšak automaticky ignoruje akcie vyvolané metódami navrhnutými na získavanie dát: GET, HEAD, OPTIONS a TRACE. To vám umožní rýchlo a jednoducho pridať metódy proti falšovaniu do všetkých metód, ktoré môžu meniť údaje bez ovplyvnenia spôsobu získavania údajov.
Nasledujúci kód je príkladom vlastnosti AutoValidateAntiforgeryToken:
V tomto príklade budú bežné operácie Index (GET) fungovať bez ohľadu na zdroj, zatiaľ čo operácia Index s metódou POST a operácia RemoveUser ako metóda Delete vyžadujú, aby klient použil token proti falšovaniu.
Prispôsobte si relevantné informácie
Mnohí ľudia sa môžu zamýšľať, či sa názov generovanej skrytej domény dá nahradiť ich vlastným a či sa názov cookie dá zmeniť na ich vlastný.
Odpoveď je áno, poďme to stručne ukázať:
V metóde ConfigureServices v Startupe pridajte nasledujúce na úpravu predvoleného názvu.
Poznámka: Najväčší rozdiel medzi asp.net core a asp.net je,Core podporuje odovzdávanie validačných parametrov požiadavkou na hlavičku, aby nevytváral formy!
private const string AntiforgeryTokenFieldName = "__RequestVerificationToken"; private const string AntiforgeryTokenHeaderName = "RequestVerificationToken";
Môžete si pozrieť zdrojový kód:Prihlásenie na hypertextový odkaz je viditeľné.
Testovací kód:
Výsledok: Pokus o prístup k metóde test1 vráti chybu 400, prístup k metóde test2 vráti parameter str, ktorý sme prešli, a vidíte, že funkcia AutoValidateAntiforgeryToken nezachytí požiadavku GET.
(Koniec)
|
Predchádzajúci:Fiddler nahrádza odkazy, požiadavky presmerujúBudúci:[otočka] SQL Server SQL Count
|