Mitä on CSRF?
CSRF (Cross-site request forgery), tunnetaan myös nimellä one click attack/session riding, kiinalainen lyhenne: CSRF/XSRF. CSRF (Cross Site Request Forgery) on verkkohyökkäysmenetelmä, joka listattiin vuonna 2007 yhdeksi Internetin 20 suurimmasta tietoturvariskistä. Muut turvallisuusriskit, kuten SQL-skriptien injektiointi ja monisivuiset verkkotunnuksen skriptihyökkäykset, ovat viime vuosina tulleet tunnetuiksi, ja monet verkkosivustot ovat puolustautuneet niitä vastaan. CSRF on kuitenkin useimmille ihmisille edelleen vieras käsite. Jopa kuuluisimmassa Gmailissa oli CSRF-haavoittuvuus loppuvuodesta 2007, joka hakkeroitiin ja aiheutti suuria tappioita Gmail-käyttäjille.
Mitä CSRF voi tehdä?
Voit ymmärtää CSRF-hyökkäykset näin: hyökkääjä on varastanut henkilöllisyytesi ja lähettänyt haitallisia pyyntöjä nimissäsi. CSRF voi tehdä asioita kuten lähettää sähköposteja, viestejä, varastaa tilisi tai jopa ostaa tavaroita ja siirtää virtuaalivaluuttaa puolestasi...... Aiheutettuihin ongelmiin kuuluvat: yksityisyyden vuodot ja omaisuuden turvallisuus.
ASP.NET MVC AntiForgeryToken -väärennösten vastainen merkki
ASP.NET MVC:ssä lomaketokenit ja evästetokenit generoidaan automaattisesti automaattisesti aina, kun katselusivulla käytetään @Html.AntiForgeryToken(). Kuitenkin, jos haluamme saavuttaa manuaalisen haun taustalla, meidän täytyy käyttää System.Web.Helpers.AntiForgery -luokkaa, ja ystävät, jotka haluavat nähdä lähdekoodin, huomaavat, että @Html.AntiForgeryToken():n sisäinen kutsumenetelmä on sama kuin AntiForgery-luokassa.
Sitä käytetään pääasiassa vastaavan muodon ja evästetokenin hankkimiseen kahdella staattisella menetelmällä: AntiForgery.GetHtml() tai AntiForgery.GetTokens (merkkijono oldCookieToken, uloslähtömerkkijono newCookieToken, ulosmerkkijono formToken). On kuitenkin huomioitava, että kun GetHtml-metodi on kutsuttu, vastaava evästetunniste luodaan automaattisesti, ja sitten pala HTML-koodia, jossa on lomaketokenin arvo piilotettu kenttä, palautetaan suoraan, ja palautettu arvo on tässä muodossa:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Piilotetun kentän nimi on yleensä kiinteä "__RequestVerificationToken", ja arvo on salattu turvatunnus. Tämä piilotettu kenttä sijoitetaan yleensä lähetettävään lomakkeeseen, ja lopullinen lähetys tarkistetaan evästetokenia vastaan.
Jos käytät GetTokens-menetelmää, voit saada salatun lomakkeen ja evästetokenin syöttämällä vastaavat parametrit, mutta tässä sinun täytyy tallentaa vastaavat arvot itse.
Seuraavaksi esittelemme menetelmän, jolla AntiForgeryToken päivitetään manuaalisesti, pääasiassa AJAX:n kautta.
Pakettikoodi:
Testikoodi:
Huomasimme, että ajax-pyyntöä lähetettäessä __RequestVerificationToken parametrit sisällytetään automaattisesti, kuten alla olevassa kuvassa näkyy:
|