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

Zamislite intitulată partyscrf.jpg

VA Argeta Astfel:

Zamislite intitulată protectedrequestcsrf.jpg

Pasi

Metoda 1 DIN 2:
CREAURI UNUI FIŞER CSRF.Clasă.Php

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

  1. Zamislite Intiturită 2543022 1
un. Creaţi Un Fişer CSRF.Clasă.Php.Începeţi Prin Crearea Unui Fişier şi Salvaţi-o cu Următorul Cuprins:

CLASA CSRF {
Zoite Codurile DIN Această Secţiune Malurului va fi Aceugată la sfârşitul acestui.
  • Zamislite Intiturită 2543022 2
    2. Creaţi o metodă get_token_id ().
    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-}}}
  • Zamislite Intiturită 2543022 3
    3. Creaţi o metodă get_token ().
    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-}}}
  • Zamislite Intiturită 2543022 4
    4. Creaţi o Metodă de Provjera () ().
    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} }
  • Zamislite Intiturită 2543022 5
    Cinci. Creaţi Metoda Form_names ().
    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-}
  • Zamislite Intiturită 2543022 6
    6. Creaţi o metodă aleatorie ().
    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 -}
  • Zamislite Intiturită 2543022 7
    7. Finazaţi konsola de închidere a klasei.
    Aceara va completa CSRF.

    }
    Acum Puteţi închide Fişierul CSRF.Clasă.Php de când am terminat cu el.
  • Metoda 2 DIN 2:
    Protecţia Paginii Cu csrf.Clasă.Php

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

    Zamislite Intiturită 2543022 8
    un. Forma de apărare post-apărare.
    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) -}?>
    Slične publikacije