Hogyan védjük meg a támadások ellen, intersite-illeszkedő kérés (csrf)
Az intersite-illeszkedő hamisítvány (CSRF) segítségével a webes alkalmazás biztonsági rése, ha az áldozat véletlenül elindítja a szkriptet a böngészőjében, amely az engedélyezett felhasználó aktuális munkamenetét használja egy adott webhelyen. A CSRF-támadások elérhetők a Get vagy a Post kérések segítségével. Ez a cikk megmutatja, hogyan védheti webes alkalmazást a CSRF támadásokról.
Módszer
Két módszert fogunk használni a CSRF támadások elleni védelmére és a kérésekre.
Az első módszer egy véletlenszerű kulcs használata. Minden egyes kérésnél ez az egyes munkamenethez létrehozott egyedi vonal. Generáljuk a kulcsot, majd bekapcsoljuk minden formában rejtett mező formájában. Ezután a rendszer ellenőrzi az űrlap érvényességét, összehasonlítja a felhasználó munkamenetváltozójában tárolt kulcsot és értéket. Vagyis, ha a támadó kérést kíván létrehozni, meg kell tudnia a kulcsértéket.
A második módszer az egyes űrlapmezőhöz véletlenszerű nevek használata. Az egyes mezőkre vonatkozó véletlenszerű név értékét a munkamenetváltozóban tárolják, és az űrlap elküldése után (Sabmitikus bekövetkezett), a rendszer új véletlenszerű mezőneveket generál. Vagyis, ha a támadó támadást szeretne tenni, meg kell ismernie az űrlapmezők véletlen nevét.
Például a kérés, amely így látott

Ez így fog kinézni:

Lépések
Ez a fő fájl, amely tartalmazza a CSRF támadások megelőzéséhez szükséges összes módszert.
CSRF osztály {

Ez a funkció kulcsfontosságú azonosítót (token) kap a munkamenetváltozóból, ha még nem jött létre, véletlenszerű token.
Public Function Get_Token_ID () {IF ($ _ Session [`token_id`])) {vissza $ _session [`token_id`] -} Else {$ token_id = $ this-> véletlen (10) - $ _ Session [` token_id `] = $ token_id-return $ token_id-}}

Ez a funkció kap egy token értéket, ha az érték még nem generált, akkor ez generálódik.
Public Function Get_Token () {IF (BETSET ($ _ ülés [`token_value`]) {RETURN_VALUE `] {` token_value `] -} Else {$ token = hash (` sha256 `, $ this-> véletlenszerű (500)) - $ _ Session [`token_value`] = $ token-visszatérés $ token-}}

Ez a funkció az azonosító érvényességét és a token ellenőrzése. Ellenőrzés következik be, ha összehasonlítjuk a kapott értékeket, ha megkapja a lekérdezéseket a felhasználó munkamenetváltozójának értékével.
Public Function Check_Valid ($ Method) {Ha ($ Method == `post` || $ módszer == `Get`) {$ POST = $ _POST- $ GET = $ _GET-IF (BETSET ($ {$ {$ Method} [ $ this-> get_token_id ()]) && ($ {$ Method} [$ this-> get_token_id ()] == $ this-> get_token ())) {True-} Else {Return False-}} Else { Visszatérés hamis-}}}

Ez az e cikkben leírt CSRF-támadások második védelme. Ez a funkció véletlenneveket generál az űrlapmezők számára.
Nyilvános függvény ($ nevek, $ regenerátum) {$ értékek = tömb () - foreach ($ nevek, $ n) {ha ($ regenerate == true) {unset ($ _ munkamenet [$ n]) -} $ s = kibocsátás ($ _ Session [$ n]) ? $ _Session [$ n]: $ this-> Véletlen (10) - $ _ Session [$ n] = $ s- $ értékek [$ n] = $ s] = $ s-} vissza $ értékek -}

Ez a funkció véletlenszerű karakterláncot generál egy véletlenszerű Linux Fal használatával az értékek nagyobb kaotikus értékéhez.
Privát funkció Véletlen ($ LEN) {functor_exists ("openssl_random_seudo_bytes")) {$ Bytelen = Intval (($ Len / 2) + 1) - $ Return = Substr (Bin2HEX (OpenSl_Random_peneudo_byetes ($ Byten)), 0, $ LEN) -} Elseif (@is_readable (`/ dev / urandom)) {$ F = Fopen (` / Dev / Urandom `,` R `) - $ Urandom = Fread ($ F, $ LEN) -Flose ($ f) - $ Return = `` -} Ha (üres ($ visszatérés)) {for ($ 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-IF ($ Rand> 90) $ rand + = 6-if ($ rand == 123) $ rand = 52-if ($ rand == 124) $ rand = 53- $ visszatérés.= CHR ($ RAND) -}} $ RETURN -}

Ez teljesíti a CSRF osztályt.
}
Ezek a lépések megmutatják, hogyan kell használni a CSRF-osztályt a CSRF támadások elleni védelem érdekében.

Az alábbi kód a CSRF-osztály használatát mutatja az űrlapra.
session_start () - közé tartozik a `CSRF.Osztály.php „- $ CSRF = new CSRF () - // Generation azonosítót és Tocken értéke $ TOKEN_ID = $ csrf-> get_token_id () - $ token_value = $ csrf-> get_token ($ TOKEN_ID) - // generálása random neveket forma Mezők $ Form_Names = $ CSRF-> form_names (Array (`Felhasználó`, `Jelszó`), FALSE) -fish (BETSET ($ _ POST [$ FORM_NAMES [`USER`]], $ _POST [$ formi_names [`jelszó`]] ])))) {// Ellenőrizze, hogy érvényes azonosító és token értéke van-e.Ha ($ CSRF-> Check_Valid (`Post`)) {// Változó űrlapok megszerzése.$ User = $ _post [$ form_names [`user`]] - $ Password = $ _post [$ form_names [`jelszó`]] - // A formázási módszer itt megy} // létrehoz egy új véletlen értéket az űrlap számára.$ form_names = $ CSRF-> form_names (tömb ("felhasználó", "jelszó"), igaz) -}?>