Cum să evitați atacurile CSRF (falsificare a cererilor de site) cu PHP
Un atac de falsifică cerere cross-site (CSRF pentru scurt) este un tip de vulnerabilitate a aplicațiilor web în care victima se execută din greșeală un script pe browser-ul dvs., care vă permite să profite de sesiunea a început într-un anumit loc. Atacurile CSRF se pot face prin comenzi GET sau POST. Acest articol prezintă modul de evitare a atacurilor CSRF în aplicația dvs. web.
conținut
pași
Vom folosi două metode pentru a evita atacurile CSRF asupra comenzilor GET și POST.
Primul lucru pe care trebuie să-l faceți este un identificator aleatoriu pentru fiecare comandă, un șir unic care este generat pentru fiecare sesiune. Generăm identificatorul și îl includem în fiecare formă ca intrare ascunsă. Sistemul va verifica dacă formularul este valid, comparând identificatorul cu cel stocat în variabila de sesiune a utilizatorului. Cu alte cuvinte, pentru ca un atacator să genereze o comandă, trebuie să știe valoarea identificatorului.
A doua metodă este să utilizați un nume aleatoriu pentru fiecare câmp din formular. Valoarea numelui aleatoriu al fiecărui câmp este stocată într-o variabilă sesiune și sistemul va genera o nouă valoare aleatorie după trimiterea formularului. Deci, pentru un atac la muncă, atacatorul va trebui să ghicească aceste nume aleatoare în formulare.
De exemplu, o comandă care arăta astfel:
Acum va arata astfel:
pași
Metoda 1
Creați fișierul csrf.class.php
Acesta este fișierul principal care va conține toate funcțiile pe care le vom folosi pentru a evita atacurile CSRF.
Această funcție obține identificatorul sesiunii utilizatorului. Dacă nu ar fi fost generată înainte, se generează un nou identificator aleatoriu.
funcția publică get_token_id () {if (isset ($ _SESSION [`token_id`])) {return $ _SESSION [`token_id`] -} altceva {$ token_id =>aleatoare (10) - $ _ SESSION [`token_id`] = $ token_id-return $ token_id-}}
Această funcție obține valoarea identificatorului. Dacă nu a fost generată înainte, va fi generată acum.
get_token funcția publică () {if (isset ($ _ SESSION [ `token_value`])) {return $ _SESSION [ `token_value`] -} else {$ jeton = hash ( `SHA256`, $ this->aleatoriu (500)) - $ _ SESSION [`token_value`] = $ token-return $ token-}}
Această funcție este utilizată pentru a verifica dacă identificatorul și valoarea identificatorului sunt valide. Acest lucru se face comparând valorile ordinului GET sau POST cu valorile stocate în variabila de sesiune a utilizatorului.
funcția publică check_valid (metoda $) {if ($ method == `post` || $ method == `get`) {$ post = $ _POST- $ get = $ _GET-if $ this->get_token_id ()]) && ($ {$ metoda} [$ this->get_token_id ()] == $ this->get_token ())) {return true-} altceva {return false-}} altceva {return false-}}
Aceasta este a doua apărare a articolului împotriva CSRF. Această funcție generează nume aleatoare pentru câmpurile de formular.
($ regenerate == true) {unset ($ _ SESSION [$ n]) -} $ s = $ (= isset ($ _ SESIUNE [$ n])? $ _SESSION [$ n]: $ acest->aleatoriu (10) - $ _ SESIUNE [$ n] = $ s- $ valori [$ n] = $ s-} retur $ valori-}
Această funcție generează un șir aleator folosind fișierul linux aleatoriu, pentru o entropie mai mare.
funcția privată aleatorie ($ len) {if ({/ dev / urandom `)) {$ f = -fclose ($ f) -} $ return = `` - pentru ($ i = 0- $ i<$ Len - $ i ++) {if (isset ($ urandom!)) {If ($ i% 2 == 0) mt_srand (timp ()% 2147 * 1,000,000 + (dublu) microtime () * 1,000,000) - $ rd = 48 + mt_rand ()% 64-} altfel $ rand = 48 + ord ($ urandom [$ i])%>57) $ rand + = 7-dacă ($ rand>($ Rand == 123) $ rand = 52-if ($ rand == 124) $ rand = 53- $ retur. = Chr ($ rand) -} return $ return-}
Aceasta va încheia clasa csrf.
}
Metoda 2
Protejați-vă paginile cu csrf.class.php
Acești pași vă vor arăta cum să utilizați clasa CSRF pentru a evita atacurile CSRF.
Codul de mai jos arată modul de implementare a clasei CSRF într-o formă.
- Cum să vă deconectați pe Facebook
- Cum se obțin privilegii de root în Ubuntu
- Cum să devii un hacker adolescent
- Cum se creează și se invocă funcții în PHP
- Cum se creează o comandă rapidă pe desktop
- Cum se creează un script de autentificare securizat în php și MySQL
- Cum să învingi Neslug în Arena Monster în Final Fantasy X
- Cum de a învinge Xaldin (Bătălia de date) în Hearts din Regatul Unit II
- Cum să învingi Vexen (Bătălia de date) în Hearts Regatul II
- Cum să dezvoltați programe securizate pentru web
- Cum să eliminați manual virusul Trojan Flashback
- Cum să ascundeți un link în HTML
- Cum se scrie un Shell Script folosind BASH Shell în Ubuntu
- Cum de a evita o injecție SQL în PHP
- Cum se activează cookie-urile în Firefox
- Cum se face un program în applescript
- Cum să vă conectați ca utilizator root în Linux
- Cum se instalează drivere pentru dispozitive necunoscute în Windows XP
- Cum să îmbunătățiți lupta împotriva jocurilor video
- Cum să navigați pe site-uri fără ca părinții dvs. să afle
- Cum să eviți atacurile de panică