|
V rámci prevence útoků CSRF poskytuje asp.net mvc funkce ValidateAntiForgeryToken proti útokům CSRF, v nové verzi jádra frameworku asp.net poskytuje Microsoft funkce AutoValidateAntiforgeryToken, specifickou ValidateAntiForgeryToken a AutoValidateAntiforgeryToken jaký je mezi nimi rozdíl, tento článek provede podrobné vysvětlení.
mvc ajax s AntiForgeryToken pro prevenci CSRF útoků h ttps:// www.itsvse.com/thread-4207-1-1.html
Zapouzdření požadavku Ajax pro útok ASP.NET CSRF h ttps:// www.itsvse.com/thread-8077-1-1.html Koncepty CSRF
CSRF Cross-Site Request Forgery (podvržení požadavku na křížovou stránku), u útoků XSS hrozí obrovské nebezpečí, lze to chápat takto: útočník ukradl vaši identitu, aby vaším jménem odeslal škodlivý požadavek, na serveru je tento požadavek zcela legitimní, ale vyplněný útočník očekává operaci, například vaším jménem odeslat poštu, odeslat zprávy, ukrást váš účet, přidat správce systému, a dokonce nakupovat zboží, převádět virtuální měnu a tak dále. Následující postup: Web A je web se zranitelností CSRF, web B je škodlivý web vytvořený útočníkem a uživatel C je legitimní uživatel webu A. V tomto případě se může jednat o uživatele, který je na webu A. Na webu A se může vyskytnout zranitelnost CSRF.
ASP.NET MVC proti útokům CSRF
Ve zobrazení stránky použijte funkci @Html.AntiForgeryToken() pro přidání tokenu, když uživatel navštíví stránku, back-end automaticky vygeneruje skrytý html kód z tokenu, jak je uvedeno níže:
<input name="__RequestVerificationToken" type="hidden" value="" CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_ KUUDbK-LS4HD16pJusFRppj-dEGc" /> Backendový kontrolér musí nastavit funkci [ValidateAntiForgeryToken ], aby se zabránilo podvrženým odesláním formuláře.
Rozdíl mezi ValidateAntiForgeryToken a AutoValidateAntiforgeryToken
AutoValidateAntiforgeryTokenAuthorizationFilter dědí z ValidateAntiforgeryTokenAuthorizationFilter a přepisuje pouze metodu ShouldValidate.
AutoValidateAntiforgeryToken Atribut, který způsobí ověření platnosti antiforgery tokenu pro všechny nezabezpečené metody HTTP. Antiforgery tokeny jsou vyžadovány pro všechny metody HTTP kromě GET, HEAD, OPTIONS a TRACE. Lze jej použít jako globální filtr, který ve výchozím nastavení spustí ověřování antifalešných tokenů aplikace.
h ttps:// github.com/dotnet/aspnetcore/blob/c925f99cddac0df90ed0bc4a07ecda6b054a0b02/src/Mvc/Mvc.ViewFeatures/src/Filters/ AutoValidateAntiforgeryTokenAuthorisationFilter.cs
AutoValidateAntiforgeryTokenAttribute ověřuje platnost volání funkce AutoValidateAntiforgeryTokenAuthorizationFilter. AutoValidateAntiforgeryTokenAuthorizationFilter dědí z ValidateAntiforgeryTokenAuthorizationFilter a přepisuje metodu ShouldValidate. true znamená, že by měla být validována, návrat false nebude validována, jak je znázorněno na následujícím obrázku:
Analýza zdrojového kódu:
Atribut AutoValidateAntiforgeryTokenAttribute umožňuje globálně aplikovat validaci tokenu proti falšování na všechny nezabezpečené metody, jako jsou POST, PUT, PATCH a DELETE. takže nemusíte přidávat atribut [ValidateAntiForgeryToken] ke každé akci, která to potřebuje. ke každé akci, která jej potřebuje.
Chcete-li jej použít, přidejte následující kód do metody třídy Startup v nástroji ConfigureServices:
Pokud potřebujete ignorovat ověřování anti-forgery, můžete k akci přidat atribut [IgnoreAntiforgeryToken ].
Někdy se může stát, že budete potřebovat tokenizovat více požadavků na řadiči a zároveň budete potřebovat, aby některé požadavky nebyly falšovány, například různé operace založené na GET. Existuje několik nástrojů, které vám tento proces usnadní a zpříjemní. Prvním z nich je vlastnost AutoValidateAntiforgeryToken. Chová se podobně jako atribut ValidateAntiForgeryToken. Automaticky však ignoruje akce volané metodami určenými pro načítání dat: GET, HEAD, OPTIONS a TRACE. to umožňuje rychle a snadno přidat metody zabraňující falšování ke všem metodám, které mohou měnit data, aniž by to ovlivnilo metody, které data načítají.
Následující kód je příkladem vlastnosti AutoValidateAntiforgeryToken:
V tomto příkladu budou fungovat obě běžné operace Index (GET) nezávisle na zdroji, zatímco operace Index s metodami POST a operace RemoveUser jako metody Delete budou vyžadovat, aby klient použil token proti falšování.
Přizpůsobení příslušných informací
Možná se najde spousta lidí, kteří si myslí, že název vygenerovaného skrytého pole lze změnit na jejich vlastní a název cookie lze změnit na jejich vlastní ~~.
Odpověď zní ano, zde je jednoduchá ukázka:
V metodě ConfigureServices funkce Startup přidejte následující obsah, abyste odpovídajícím způsobem změnili výchozí název.
Poznámka: Největší rozdíl mezi asp.net core a asp.net je v tom, že core podporuje předávání validačních parametrů prostřednictvím hlavičky požadavku, nikoliv formuláře!
private const string AntiforgeryTokenFieldName = "__RequestVerificationToken"; private const string AntiforgeryTokenHeaderName = "RequestVerificationToken";
Zdrojový kód si můžete prohlédnout: https: //github.com/dotnet/aspnetcore/blob/c925f99cddac0df90ed0bc4a07ecda6b054a0b02/src/Antiforgery/src/Internal/ DefaultAntiforgery.cs
Testovací kód:
Výsledek: Při pokusu o přístup k metodě test1 se vrátí chyba 400 a při přístupu k metodě test2 se vrátí parametr str, který jsme předali, takže je vidět, že funkce AutoValidateAntiforgeryToken nezachycuje požadavky GET.
(konec) |
Předchozí: Fiddler nahrazuje odkazy, přesměrování požadavkůDalší: [Report]SQL Server SQL Count při přidávání podmínek
|