Cum să protetjaţi ™ potresa atakurilor utiljizând o cerre de instalare intersite (csrf) în php
Atacul Care Utilizează eva falsa (CSRF) Este Un Tip de Vumnerabilitate APLICAMIEI WEBUNCI Când Fliinta Lansează Neintenţionat Scriptul Scrierul Syuu, Care Utilizează Sesiunea Curentă UtilizatorUlui autorizat înttr-UN Anumit Site. Atakuril CSRF pot fi fă Cune Prin Cereri de Obţinere Sau Post. Acest articol vă va aricta cum să vă protetjaţi aplicaţia web de atacurile csrf.
Metodă
Vom Folysi Două Metode Pentru Proteja împotriva atakurilor CSRF ALE Solicărilor DVS. De primire şi post.
Prima metodă este de a utiliza o cheie aleatorie. Cu feecare cerere, aceara este o linie unicăe genetată pentru fentare sesiune. Noi Genem Cheia şi Apoi o transformam la ficare Formă sub forma unui câmp ascuns. Apoi, Sistemul VIRIFIFI FormularUlui, Usporedni Cheia şi Valoaarea de Sesiune Atilizatoruui. Adeică Dacă atacatorul doreşte să Genereze o cerere, va lobui să cunoască valoaarea.
Douua Metodăe este utilizarea de nume aleatioare pentru feicare câmp de formular. Valoarea unui nume aleatorie pentru feecare câmp esiunii şi după trimiterea formulalului (sabmitic avut loc), sistemul genează noi numeo pivo câmpurilor aleatorii. Adeică Dacă atacatorul doreşte să facă un atac, va trebui să cunoască aceste nume aleatoriu pila câmpurilor de formular.
De Exemplu, Cererea Care fă cut-o aşa

VA Argeta Astfel:

Pasi
Acesta este fişierul glavna skrb va ca conţine tate metodele necesesare pentru preveli atakuril csrf.
CLASA CSRF {

Aceara karakteristică premijerşte un id cheie (token) din variabila sesiuunii, dacă nu fost încă create, genează un jeton aleatoriu.
Funcţia publike get_token_id () {ako (ISET ($ _ sesiune [`token_id`])) {vratiti $ _Sesion [`token_id`] -} Altceva {$ token_id = $ acest-> slučajno (10) - $ _ sesiune [` token_id `] = $ token_id-povrat $ token_id-}}}

Aceara caracteristică premijer Ofşte o Valoare uzeti, dacă valoarea nu a frost încă generate.
Funcţia publika get_token () {ako (istod (sesiune de $ _ [token_value "] {povratni_value `] {" token_value "] -} Altceva {$ token = Hash (` Shampa256 `, $ Acest-> Alexor (500)) - $ _ sesiune [`token_value`] = $ token-povratak $ token-}}}

Aceara karakteristică verifififilitatea şi tokena. Verificarea su pridruga o kompataciji valorilor obţinute la obţinearea sau poarea integrenărilor cu valorile variabilei ssiuunii utilizatorlui.
Funcţia publică check_valid ($ metoda) {ako ($ metoda == `post` || $ Metoda == "Get") {$ post = $ _POST-$ dobit = $ _get-ako (Ispravna ($ {$ Metoda} $ Ovaj-> get_token_id ()]) && ($ {$ Metoda} [$ this-> get_t_t_id_id ()] == $ this-> get_token ())) {vraćanje true-} altceva {retur fals-}} RURAĆI FALSE} }

Aceara Este Doua ProteCECţie îMpotriva atakurilor CSRF Descrise în Acest Articol. Aceara caracteristică genează nume aleatorii pentru câmpurile de formular.
Funcţia publică Form_names ($ Nume, $ Regenerary) {$ Valori = matrice ($ n) {dacă ($ regeneratirate == adevărat) {Unet ($ _ Sesiune [$ N]) -} $ S = Izset ($ _ Sesiune [$ Sesiune [ $ n]) ? $ _Sesion [$ n]: $ this-> slučajni (10) - $ _ sesiune [$ n] = $ s- valori [$ n] = $ S-} Uređaj $ Valori-}

Aceara caracteristică genează un butoriu linux pentru o valoare mare mare haatică valorilor.
Funcţie Privată Aleatorie ($ Len) {Funcţii_exists (`opensl_random_seudo_bytes`)) {$ BYTEENTH = IntVAL (($ Len / 2) + 1) - $ Retrur = Substr (Bin2Hex (OpenSl_random_peneudo_Beetes ($ Byten)), 0, $ Len) -} altcinef (@is_Riryble (`/ dev / urandoma`)) {$ f = fopen (`/ dev / urandom`, `R`) - $ Urantur = flead ($ F, $ Len) -flose ($ F) - $ retur = `` -} dacă (gol ($ retur)) {pentru ($ i = 0- $ I<$len-++$i) {if (!isset($urandom)) {if ($i%2==0) {mt_srand(time()%2147 * 1000000 + (double)microtime() * 1000000)-}$rand=48+mt_rand()%64-} else {$rand=48+ord($urandom[$i])%64-}if ($rand>57) $ rand + = 7-ako ($ rand> 90) $ rand + = 6-ako ($ rand == 123) $ rand = 52-ako ($ rand == 124) $ rand = 53- $.= Chr ($ rand) -}}} Povratak $ Povratak -}

Aceara va completa CSRF.
}
Aceşti paşi vă Vor Arăta cum s să utilizaţi crazre csrf pentru a atalurilor CSRF.

Codul de mai jos prezintă utilizarea Clasei csrf pentrularni.
session_start () - uključiti "CSRF.Clasă.PHP `- $ CSRF = Noua CSRF () - // Generation ID şi Valoarea tocken $ token_id = $ CSRF-> Get_Token_id () - $ token_Value = $ CSRF-> Get_token ($ token_id) - // Generarea de numeraii pentru formular Domenula $ Form_names = $ CSRF-> Form_names (matrice ("Utilizator", "parolă"), False) -Af ($ _ post [$ format_names ["Utilizator]], $ _Post [$ Form_names [`Parola]]] { // verificaţi dacă este valabilă id-ul şi valoarea uzeti.DACă ($ CSRF-> check_valid (`post`)) {// Obţine Forme variabile.$ Utilizator = $ _POST [$ Form_names [`korisnik`]] - $ PAROLA = $ _POST [$ Form_names [`parola`]] - Metoda de Unakuje Aići} // Generaţi o Nouă Valoare Aleatorie Pentruular.$ Form_names = $ CSRF-> Form_names (Matrice ("Korištenje", "Parolă"), TRUE) -}?>