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.

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:

Passwordscsrf.jpg" class ="imagine lightbox">Imaginea intitulată Passwordscsrf.jpg

Acum va arata astfel:

Protectedrequestcsrf.jpg" class ="imagine lightbox">Imaginea intitulată Protectedrequestcsrf.jpg

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.

Imaginea intitulată 2543022 1
1
Creați csrf.class.php. Începeți prin a crea fișierul și salvați-l cu următorul conținut:

Tot codul din această secțiune a ghidului trebuie adăugat la sfârșitul acestui fișier.
  • Imaginea intitulată 2543022 2
    2
    Creați funcția get_token_id ().
    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-}}
  • Imaginea intitulată 2543022 3
    3
    Creați funcția get_token ().
    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-}}
  • Imaginea intitulată 2543022 4
    4


    Creați funcția check_valid ().
    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-}}
  • Imaginea intitulată 2543022 5
    5
    Creați funcția form_names ().
    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-}
  • Imaginea cu titlul 2543022 6
    6
    Creați funcția aleatoare ().
    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-}
  • Imaginea intitulată 2543022 7
    7
    Închideți tasta Clasă.
    Aceasta va încheia clasa csrf.

    }
    Acum puteți închide fișierul csrf.class.php, deoarece am terminat editarea.
  • 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.

    2543022-8.jpg" class ="imagine lightbox">
    Imaginea intitulată 2543022 8
    1
    Protejați un formular POST.
    Codul de mai jos arată modul de implementare a clasei CSRF într-o formă.

    Distribuiți pe rețelele sociale:

    înrudit
    Cum se obțin privilegii de root în UbuntuCum se obțin privilegii de root în Ubuntu
    Cum să devii un hacker adolescentCum să devii un hacker adolescent
    Cum se creează și se invocă funcții în PHPCum se creează și se invocă funcții în PHP
    Cum se creează o comandă rapidă pe desktopCum se creează o comandă rapidă pe desktop
    Cum se creează un script de autentificare securizat în php și MySQLCum se creează un script de autentificare securizat în php și MySQL
    Cum să învingi Neslug în Arena Monster în Final Fantasy XCum 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 IICum 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 IICum să învingi Vexen (Bătălia de date) în Hearts Regatul II
    Cum să dezvoltați programe securizate pentru webCum să dezvoltați programe securizate pentru web
    Cum să eliminați manual virusul Trojan FlashbackCum să eliminați manual virusul Trojan Flashback
    » » Cum să evitați atacurile CSRF (falsificare a cererilor de site) cu PHP

    © 2011—2020 ertare.com