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.
steg
Metod 1
Beskrivning av metoderVi 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:
nu kommer det att se ut så här:
Metod 2
Skapa filen csrf.class.phpDetta är huvudfilen som innehåller alla funktioner som kommer att användas för att förhindra CSRF-attacker.
phpclass csrf {
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-}}
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-}}
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-}}
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-}
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-}
Detta stänger csrf-klassen.
}
Metod 3
Skydda sidorna med csrf.class.phpDessa steg visar hur du använder CSRF-klassen för att förhindra CSRF-attacker.
Följande kod visar hur man implementerar csrf-klassen på en blankett.
Phpsession_start () - innehåller `csrf.class.php` - $ CSRF CSRF = new () - // Generera token-ID och validering $ TOKEN_ID = $ csrf->get_token_id () - $ token_value = $ csrf->get_token ($ token_id) - // Generera slumpmässiga namn för moduler $ form_names = $ csrf-> form_names (array ( `användare`, `lösenord`), falsk) -Om (isset ($ _ POST [$ form_names [ `användar`]], $ _POST [$ form_names [ `password`]])) {// Kontrollera om Tokens Id och Token Value är valid.if ($ csrf->. Check_valid ( `post`)) {// Få Variabler modul $ user = $ _POST [$ form_names [ `användare`]] - $ password = $ _POST [$ form_names [ `password`]] - // Funktion Module går här} // regenerera en ny slumpmässigt värde för modulen. form_names $ = $ csrf->form_names (array (`user`, `password`), true) -}?>
- Hur blockera och ta bort blockering av webbplatser på Firefox
- Hur man avbryter ett Uber-konto
- Hur man kontaktar eBay
- Hur man skapar och ringer till en PHP-funktion
- Hur man kontrollerar tillståndet för invandringsbegäran i USA
- Hur delas rader i Java
- Hur man skapar en datingwebbplats
- Så här skapar du ett säkert inloggningsskript med PHP och MySQL
- Så här postar du en HTTP-begäran på Android
- Hur man hanterar gästfrihetsförfrågningar från Couchsurfing Couchmanager
- Hur skickar du en e-post till Amazon
- Hur skickar du en e-post från Yahoo!
- Så här manipulerar du strängar i Java
- Hur får du gratis musik med Google
- Hur man förbättrar bekämpningsreflexer
- Så här lägger du in en öppen soffans begäran på Couchsurfing.org
- Hur ansöker du om ett familjeåterkallande visum i USA
- Hur man skriver en epost till kundtjänst
- Så här registrerar du dig och använder Google AdSense
- Så här använder du en sökmotor för att söka på en webbplats
- Hur man bryter mot en webbplats