gushelom.ru

Så här förhindrar du attackeringar i fråga om cross-site request forgery (CSRF) i PHP

En cross-site begäran förfalskning attack (CSRF) är en typ av Web Application sårbarheter där offret oavsiktligt köra ett skript i webbläsaren som använder anslutningssessionen till en viss webbplats. CSRF-attacker kan utföras på GET eller POST-förfrågningar. I den här artikeln visas hur du undviker CSRF-attacker på din webbapplikation.

Metod 1

Beskrivning av metoder

Vi använder två metoder för att undvika CSRF-attacker i dina GET- och POST-förfrågningar.


Den första är att inkludera en slumpmässig token med varje förfrågan, vilket är en unik sträng som genereras för varje session. Vi genererar token och sedan inkludera den i varje modul som en dold ingång. Systemet kontrollerar om modulen är giltig genom att jämföra token med den som lagras i användarsession variabeln. Det betyder att en angripare måste veta värdet av token för att kunna skapa en förfrågan.


Den andra metoden är att använda slumpmässigt namn för varje fält i formuläret. Värdet av slumpmässigt namn för varje fält lagras i en session variabel och, efter att formuläret har presenterats, genererar systemet ett nytt slumpmässigt värde. Detta innebär att angriparen bör gissa dessa slumpmässiga namn på moduler för att kunna attackera.


Till exempel en begäran som en gång uppträdde så här:

Bildnamn Passwordscsrf.jpg

nu kommer det att se ut så här:

Bildnamn Protectedrequestcsrf.jpg

Metod 2

Skapa filen csrf.class.php

Detta är huvudfilen som innehåller alla funktioner som kommer att användas för att förhindra CSRF-attacker.

Bildnamn 2543022 1
1
Skapa csrf.class.php. Börja med att skapa filen med det underliggande innehållet och spara det:

Alla koden i det här avsnittet i guiden läggs till i slutet av den här filen.
  • Bildnamn 2543022 2
    2
    Skapar funktionen get_token_id () Funktion.
    Den här funktionen tar token-id från användarsessionen, om man inte redan har skapat, varefter den genererar en slumpmässig token.

    offentlig funktion get_token_id () {if (isset ($ _ SESSION [`token_id`])) {return $ _SESSION [`token_id`] -} annars {$ token_id = $ this->slumpmässigt (10) - $ _ SESSION [`token_id`] = $ token_id-return $ token_id-}}
  • Bildnamn 2543022 3
    3
    Skapar funktionen get_token ().
    Den här funktionen får symbolvärdet, om det inte redan har skapats, varefter det genererar en.

    public function få token () {if (isset ($ _ SESSION [ `Token_value`])) {return $ _ SESSION [ `Token_value`] - this-} else {$ token = hash (sha256 `, $>slumpmässig (500)) - $ _ SESSION [`token_value`] = $ token-return $ token-}}
  • Bildnamn 2543022 4
    4
    Skapar funktionen check_valid () Funktion.
    Denna funktion används för att kontrollera om token-id och token-värdet är giltiga. Det gör det genom att kontrollera värdena på GET- eller POST-förfrågan med värdena som lagras i användarsession variabeln.

    public function check_valid ($ method) {if ($ method == `post` || $ method == `get`) {$ post = $ _POST- $ get = $ _GET-if (isset ($ {$ metod} $ this->get_token_id ()]) && ($ {} $ Method [$ this->get_token_id ()] == $ this->get_token ())) {return true-} else {return false-}} annars {return false-}}
  • Bildnamn 2543022 5
    5
    Skapar funktionen form_names () Funktion.
    Detta är det andra försvaret som nämns i denna artikel mot CSRF-attacken. Den här funktionen genererar slumpmässiga namn för formulärfälten.

    public function form_names ($ namn, $ regeneratet) {$ värden = array () - foreach ($ namn som $ n) {if ($ regenererar == true) {unset ($ _ SESSION [$ n]) -} $ s = isset ($ _ SESSION [$ n])? $ _SESSION [$ n]: $ this->slumpmässig (10) - $ _ SESSION [$ n] = $ s- $ värden [$ n] = $ s-} returnera $ värden-}
  • Bildnamn 2543022 6
    6
    Skapar funktionen slumpmässig () funktion.
    Den här funktionen genererar en slumpmässig sträng med hjälp av den Linux-slumpmässiga filen för att öka entropin.

    privat funktion slumpmässig ($ len) {if (function_exists ( `openssl_random_pseudo_bytes`)) {$ byteLen = intval (($ len / 2) + 1) - $ retur = substr (BIN2HEX (openssl_random_pseudo_bytes ($ byteLen)), 0, $ len) -} elseif (@is_readable ( `/ dev / urandom`)) {$ f = fopen ( `/ dev / urandom`, `r`) - $ urandom = fread ($ f, $ len) -fclose ($ f) - $ avkastning = `` -} if (tom ($ avkastning)) {for (i = $ 0- $ s<$ Len - $ i ++) {if) {if ($ i% 2 == 0) {mt_srand (tid ()% 2147 + miljoner * (dubbel) microtime () * miljoner) (Isset ($ urandom!) - } $ rand = 48 + mt_rand ()% 64-} else {$ rand = 48 + ord ($ urandom [$ i])% 64-} if ($ rand57) $ rand + = 7-if ($ rand90) $ rand + = 6-if ($ rand == 123) $ rand = 52-if ($ rand == 124) $ rand = 53- $ return. = Chr ($ rand) -}} returnera $ return-}
  • Bildnamn 2543022 7
    7
    Stäng parentesen i klassen.
    Detta stänger csrf-klassen.

    }
    Nu kan du stänga csrf.class.php-filen eftersom vi har redigerat den.
  • Metod 3

    Skydda sidorna med csrf.class.php

    Dessa steg visar hur du använder CSRF-klassen för att förhindra CSRF-attacker.

    Bildnamn 2543022 8
    1
    Skydda en POST-blankett.
    Följande kod visar hur man implementerar csrf-klassen på en blankett.

    Dela på sociala nätverk:

    Relaterade
    Hur man avbryter ett Uber-kontoHur man avbryter ett Uber-konto
    Hur man kontaktar eBayHur man kontaktar eBay
    Hur man skapar och ringer till en PHP-funktionHur man skapar och ringer till en PHP-funktion
    Hur man kontrollerar tillståndet för invandringsbegäran i USAHur man kontrollerar tillståndet för invandringsbegäran i USA
    Hur delas rader i JavaHur delas rader i Java
    Hur man skapar en datingwebbplatsHur man skapar en datingwebbplats
    Så här skapar du ett säkert inloggningsskript med PHP och MySQLSå här skapar du ett säkert inloggningsskript med PHP och MySQL
    Så här postar du en HTTP-begäran på AndroidSå här postar du en HTTP-begäran på Android
    Hur man hanterar gästfrihetsförfrågningar från Couchsurfing CouchmanagerHur man hanterar gästfrihetsförfrågningar från Couchsurfing Couchmanager
    Hur skickar du en e-post till AmazonHur skickar du en e-post till Amazon
    » » Så här förhindrar du attackeringar i fråga om cross-site request forgery (CSRF) i PHP

    © 2011—2021 gushelom.ru