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.
conținut
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:
Nou sal dit so lyk:
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.
phpclass csrf {
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-}}
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-}}
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-}}
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-}
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-}
Dit sal die csrf klas eindig.
}
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.
Die onderstaande kode toon hoe om die CSRF-klas in `n vorm te implementeer.
phpsession_start () - sluit `csrf.class.php` in - $ csrf = nuwe csrf () - // Genereer `n identifiseerder en bevestig dit $ token_id = $ csrf->get_token_id () - $ token_value = $ csrf->get_token ($ token_id) - // Genereer ewekansige name vir die vorm $ form_names = $ csrf->form_names (array ( `n gebruiker `,` wagwoord `), vals) -As (isset ($ _ POST [$ form_names [ `n gebruiker`]], $ _POST [$ form_names [ `wagwoord`]])) {// Kyk of die identifiseerder en die waarde daarvan is geldig.if ($ csrf->check_valid ( `post`)) {// Kry die vorm Veranderlikes $ gebruiker = $ _POST [$ form_names [ `n gebruiker `]] -. $ wagwoord = $ _POST [$ form_names [` wagwoord `]] - // Die funksie Form gaan hier} / / Herregistreer `n nuwe ewekansige waarde vir die vorm. $ form_names = $ csrf->vorm_name (skikking (`gebruiker`, `wagwoord`), waar) -}?>
- Hoe om `n bestelling op eBay te kanselleer
- Hoe om `n groot kombinasie in video speletjies van stryd te skep
- Hoe om `n veilige aanmeldskrip in PHP en MySQL te skep
- Hoe om Zexion te verslaan (Slag van data) in Koninkryk Hearts II
- Hoe om Red in Heartgold of SoulSilver te verslaan
- Hoe Vexen te verslaan (Slag van data) in Koninkryk Hearts II
- Hoe om gebruikers in Linux te bestuur
- Hoe om jou bestelling in Google Express te kanselleer
- Hoe om die SkyDrive-sessie in Windows 8 te sluit
- Hoe om veilige programme vir die web te ontwikkel
- Hoe om HTTP POST versoeke op Android uit te voer
- Hoe om McAfee Site Advisor vir Chrome te kry
- Hoe om refleksie in stryd te verbeter
- Hoe om homofobie op die Internet aan te spreek
- Hoe om `n bestelling te kanselleer
- Hoe om dieraanvalle te oorleef
- Hoe om `n bestelling te maak
- Hoe algemene aandele te koop
- Hoe om Alduin te klop
- Hoe configure vsftpd FTP in Ubuntu Linux
- Hoe om `n persoonlike stelsel simbool in Windows te skep