Lai novērstu CSRF uzbrukumus, asp.net mvc nodrošina viltošanas novēršanas uzbrukuma līdzekli ValidateAntiForgeryToken, un asp.net pamatsistēmas jaunajā versijā Microsoft nodrošina līdzekli AutoValidateAntiforgeryToken, īpaši ValidateAntiForgeryToken un AutoValidateAntiforgeryToken Kāda ir atšķirība, šajā rakstā tiks detalizēti izskaidrots.
KSA koncepcija
CSRF starpvietņu pieprasījumu viltošana, tāpat kā XSS uzbrukumi, ir ārkārtīgi kaitīga, jūs to varat saprast šādi: uzbrucējs nozog jūsu identitāti un nosūta ļaunprātīgu pieprasījumu jūsu vārdā, kas ir pilnīgi likumīgs serverim, bet pabeidz darbību, ko uzbrucējs sagaida, piemēram, e-pasta ziņojumu un ziņojumu nosūtīšanu jūsu vārdā, konta nozagšanu, sistēmas administratoru pievienošanu vai pat preču iegādi, virtuālās valūtas pārskaitījumi utt. Web A ir vietne ar CSRF ievainojamību, Web B ir ļaunprātīga vietne, ko izveidojis uzbrucējs, un lietotājs C ir likumīgs Web A lietotājs.
ASP.NET MVC pret CSRF uzbrukumiem
Skata lapā izmantojiet @Html.AntiForgeryToken(), lai pievienotu tagu, un, kad lietotājs piekļūst lapai, aizmugursistēma automātiski ģenerēs slēptu html kodu ar tagu šādi:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> Fona kontrolierim jābūt iestatītam [ValidateAntiForgeryToken] funkciju, lai novērstu veidlapu iesniegumu viltošanu.
ValidateAntiForgeryToken un AutoValidateAntiforgeryToken atšķiras
AutoValidateAntiforgeryTokenAuthorizationFilter manto ValidateAntiforgeryTokenAuthorizationFilter, bet tajā pārraksta tikai metodi ShouldValidate.
AutoValidateAntiforgeryToken rekvizīts, kas izraisa viltošanas novēršanas marķieru validāciju visām nedrošajām HTTP metodēm.HTTP metodēm, kas nav GET, HEAD, OPTIONS un TRACE, ir nepieciešams viltošanas novēršanas marķieris。 To var lietot kā globālu filtru, lai pēc noklusējuma aktivizētu lietojumprogrammas viltošanas novēršanas marķiera validāciju.
Hipersaites pieteikšanās ir redzama.
AutoValidateAntiforgeryTokenAttribute pārbauda izsaukumu uz AutoValidateAntiforgeryTokenAuthorizationFilter, kas pārmanto no ValidateAntiforgeryTokenAuthorizationFilter,Metode ShouldValidate ir pārrakstīta, atgriežot true, tas nozīmē, ka tā ir jāapstiprina, un atgriežot false, tā netiks validēta, kā parādīts attēlā:
Analizējiet avota kodu:
AutoValidateAntiforgeryTokenAttribute ļauj viltošanas novēršanas marķieru validāciju globāli piemērot visām nedrošajām metodēm, piemēram, POST, PUT, PATCH un DELETE. Tāpēc rekvizīts [ValidateAntiForgeryToken] nav jāpievieno katrai darbībai, kurai tas ir nepieciešams.
Lai to izmantotu, pievienojiet šādu kodu ConfigureServices startēšanas klases metodei:
Ja jums ir jāignorē viltošanas novēršanas autentifikācija, varat pievienot [IgnorētAntiforgeryTokenatribūts darbībai.
Dažreiz jums var būt nepieciešams atzīmēt vairākus pieprasījumus kontrolierī, vienlaikus nepieciešami daži pieprasījumi, kas nav jāvilto, piemēram, dažādas uz GET balstītas darbības. Ir vairāki rīki, kurus varat izmantot, lai padarītu procesu ērtāku un ērtāku. Pirmais ir AutoValidateAntiforgeryToken rekvizīts. Tas darbojas tāpat kā rekvizīts ValidateAntiForgeryToken. Tomēr tas automātiski ignorēs darbības, ko izsauc datu izgūšanai paredzētās metodes: GET, HEAD, OPTIONS un TRACE. Tas ļauj ātri un vienkārši pievienot viltošanas novēršanas metodes visām metodēm, kas var mainīt datus, neietekmējot datu izgūšanas veidu.
Šis kods ir rekvizīta AutoValidateAntiforgeryToken piemērs:
Šajā piemērā abas parastās indeksa operācijas (GET) darbosies neatkarīgi no avota, savukārt gan indeksa operācijai ar POST metodi, gan RemoveUser operācijai kā dzēšanas metodei klientam būs jāizmanto viltošanas novēršanas marķieris.
Pielāgojiet attiecīgo informāciju
Daudzi cilvēki var brīnīties, vai ģenerētā slēptā domēna nosaukumu var aizstāt ar savu, un vai sīkdatnes nosaukumu var mainīt uz savu.
Atbilde ir jā, īsumā parādīsim:
Startēšanas metodē ConfigureServices pievienojiet tālāk norādīto, lai attiecīgi modificētu noklusējuma nosaukumu.
Piezīme: Lielākā atšķirība starp asp.net kodolu un asp.net ir,Core atbalsta validācijas parametru nodošanu, pieprasot galveni, nevis veidot veidlapas!
privātā konstitūcijas virkne AntiforgeryTokenFieldName = "__RequestVerificationToken"; private const string AntiforgeryTokenHeaderName = "RequestVerificationToken";
Avota kodu var apskatīt:Hipersaites pieteikšanās ir redzama.
Testa kods:
Rezultāts: Mēģinot piekļūt test1 metodei, tiek atgriezta kļūda 400, piekļūstot test2 metodei, tiek atgriezts str parametrs, ko mēs nokārtojām, un jūs varat redzēt, ka AutoValidateAntiforgeryToken funkcija nepārtver GET pieprasījumu.
(Beigas)
|