dmylogi.com

Hoe om CSRF-aanvalle te voorkom (kruis-site-vervalsing) met PHP

`N aanval van die vervalsing van kruis-site versoek (CSRF vir kort) is `n tipe van kwesbaarheid van web programme waarin die slagoffer per ongeluk `n script op jou browser wat jou toelaat om voordeel te trek uit die sessie te neem hardloop begin in `n bepaalde plek. CSRF aanvalle kan met GET of POST bestellings gedoen word. Hierdie artikel wys hoe om CSRF aanvalle in jou webprogram te vermy.

stappe

Ons sal twee metodes gebruik om CSRF aanvalle op u AOO en POST bestellings te vermy.


Die eerste ding om te doen is `n ewekansige identifiseerder vir elke bestelling, `n unieke string wat vir elke sessie gegenereer word. Ons genereer die identifiseerder en sluit dit in elke vorm as `n verborge inskrywing in. Die stelsel sal seker maak of die vorm geldig is, en vergelyk die identifiseerder met die een wat in die sessie veranderlike van die gebruiker gestoor is. Met ander woorde, as `n aanvaller `n bestelling genereer, moet hy die waarde van die identifiseerder ken.


Die tweede metode is om `n ewekansige naam vir elke veld in die vorm te gebruik. Die waarde van die ewekansige naam van elke veld word gestoor in `n sessieveranderlike en die stelsel sal `n nuwe ewekansige waarde genereer nadat die vorm gestuur is. Dus vir `n aanval op die werk, sal die aanvaller hierdie ewekansige name in die vorms moet raai.


Byvoorbeeld, `n bestelling wat voorheen só gelyk het:

Passwordscsrf.jpg" klas ="beeld ligkas">Prent getiteld Passwordscsrf.jpg

Nou sal dit so lyk:

Protectedrequestcsrf.jpg" klas ="beeld ligkas">Prent getiteld Protectedrequestcsrf.jpg

stappe

Metode 1
Skep die csrf.class.php lêer

Dit is die hooflêer wat al die funksies bevat wat ons sal gebruik om CSRF aanvalle te vermy.

Prent getiteld 2543022 1
1
Skep csrf.class.php. Begin deur die lêer te skep en dit te stoor met die volgende inhoud:

Al die kode in hierdie afdeling van die gids moet aan die einde van hierdie lêer bygevoeg word.
  • Prent getiteld 2543022 2
    2
    Skep die get_token_id () funksie.
    Hierdie funksie kry die identifiseerder van die gebruiker se sessie. As dit nog nie gegenereer is nie, word `n nuwe ewekansige identifikasie gegenereer.

    openbare funksie get_token_id () {if (isset ($ _ SESSION [`token_id`])) {retour $ _SESSION [`token_id`] -} anders {$ token_id = $ this->random (10) - $ _ SESSION [`token_id`] = $ token_id-return $ token_id-}}
  • Prent getiteld 2543022 3
    3
    Skep die funksie get_token () Funksie.
    Hierdie funksie verkry die waarde van die identifiseerder. As een nie voorheen gegenereer is nie, sal dit nou gegenereer word.

    get_token openbare funksie () {if (isset ($ _ SESSIE [ `token_value`])) {terugkeer $ _SESSION [ `token_value`] -} anders {$ teken = hash ( `sha256`, $ this->willekeurig (500)) - $ _ SESSIE [`token_value`] = $ token-return $ token-}}
  • Prent getiteld 2543022 4
    4


    Skep die check_valid () funksie.
    Hierdie funksie word gebruik om te kontroleer of die identifiseerder en die waarde van die identifiseerder geldig is. Dit doen dit deur die waardes van die AOO- of POST-volgorde te vergelyk met die waardes wat in die gebruiker se sinsveranderlike gestoor is.

    publieke funksie check_valid ($ metode) {if ($ metode == `post` || $ method == `kry`) {$ post = $ _POST- $ get = $ _GET-if (isset ($ {$ method} $ this->get_token_id ()]) && ($ {$ method} [$ this->get_token_id ()] == $ this->get_token ())) {return true-} anders {return false-}} anders {return false-}}
  • Prent getiteld 2543022 5
    5
    Skep die form_names () funksie.
    Dit is die tweede verdediging van die artikel teen die CSRF. Hierdie funksie genereer ewekansige name vir die vormvelde.

    openbare funksie form_names ($ name, $ wedergeborenes) {$ waardes = array () - foreach ($ name as $ n) {if ($ wedergeborenes == ware) {ontstel ($ _ SESSIE [$ n]) -} $ s = isset ($ _ SESSION [$ n])? $ _SESSION [$ n]: $ this->ewekansige (10) - $ _ SESSION [$ n] = $ s- $ waardes [$ n] = $ s-} retoureer $ waardes-}
  • Prent getiteld 2543022 6
    6
    Skep die ewekansige () funksie.
    Hierdie funksie genereer `n ewekansige string met die lukrake linux-lêer, vir `n groter entropie.

    privaat funksie ewekansige ($ len) {if (@is_readable (`/ dev / urandom`)) {$ f = fopen (`/ dev / urandom`, `r`) - $ urandom = fread ($ f, $ len) -Vou ($ f) -} $ terug = `` - vir ($ i = 0- $ i<$ Len - $ i ++) {if (isset ($ urandom!)) {As ($ i% 2 == 0) mt_srand (tyd ()% 2147 * 1000000 + (dubbel) microtime () * 1000000) - $ rand = 48 + mt_rand ()% 64-} anders $ rand = 48 + ord ($ urandom [$ i])% 64-if ($ rand>57) $ rand + = 7-if ($ rand>$ Rand = = 6-if ($ rand == 123) $ rand = 52-if ($ rand == 124) $ rand = 53- $ terug. = Chr ($ rand) -} retour $ terugkeer-}
  • Beeld getiteld 2543022 7
    7
    Maak die Klastoets toe.
    Dit sal die csrf klas eindig.

    }
    Nou kan jy die lêer csrf.class.php sluit, aangesien ons dit klaar gemaak het.
  • Metode 2
    Beskerm u bladsye met csrf.class.php

    Hierdie stappe sal jou wys hoe om die CSRF-klas te gebruik om CSRF aanvalle te vermy.

    2543022-8.jpg" klas ="beeld ligkas">
    Prent getiteld 2543022 8
    1
    Beskerm `n POST-vorm.
    Die onderstaande kode toon hoe om die CSRF-klas in `n vorm te implementeer.

    Deel op sosiale netwerke:

    Verwante
    Hoe om `n groot kombinasie in video speletjies van stryd te skepHoe om `n groot kombinasie in video speletjies van stryd te skep
    Hoe om `n veilige aanmeldskrip in PHP en MySQL te skepHoe om `n veilige aanmeldskrip in PHP en MySQL te skep
    Hoe om Zexion te verslaan (Slag van data) in Koninkryk Hearts IIHoe om Zexion te verslaan (Slag van data) in Koninkryk Hearts II
    Hoe om Red in Heartgold of SoulSilver te verslaanHoe om Red in Heartgold of SoulSilver te verslaan
    Hoe Vexen te verslaan (Slag van data) in Koninkryk Hearts IIHoe Vexen te verslaan (Slag van data) in Koninkryk Hearts II
    Hoe om gebruikers in Linux te bestuurHoe om gebruikers in Linux te bestuur
    Hoe om jou bestelling in Google Express te kanselleerHoe om jou bestelling in Google Express te kanselleer
    Hoe om die SkyDrive-sessie in Windows 8 te sluitHoe om die SkyDrive-sessie in Windows 8 te sluit
    Hoe om veilige programme vir die web te ontwikkelHoe om veilige programme vir die web te ontwikkel
    Hoe om HTTP POST versoeke op Android uit te voerHoe om HTTP POST versoeke op Android uit te voer
    » » Hoe om CSRF-aanvalle te voorkom (kruis-site-vervalsing) met PHP
    © 2024 dmylogi.com