Jak chránit před útoky pomocí požadavku interstite-fitting (csrf) v php
Útok pomocí falešného fake (CSRF) je typ chyby zabezpečení webové aplikace, když je oběť neúmyslně spustí skript ve svém prohlížeči, který používá aktuální relaci autorizovaného uživatele v konkrétním webu. Útoky CSRF lze provést prostřednictvím požadavků Získejte nebo poštou. Tento článek vám ukáže, jak chránit svou webovou aplikaci od útoků CSRF.
Metoda
Budeme používat dvě metody na ochranu proti útokům CSRF vašich požadavků na vaše a pošta.
První metodou je použití náhodného klíče. S každým požadavkem se jedná o jedinečnou linku generovanou pro každou relaci. Generují klíč a pak jej zapněte do každé podoby ve formě skrytého pole. Dále systém kontroluje platnost formuláře, což porovnává klíč a hodnotu uloženou v proměnné relace uživatele. To znamená, že pokud chce útočník generovat žádost, bude muset znát hodnotu klíčů.
Druhou metodou je použití náhodných jmen pro každé pole formuláře. Hodnota náhodného jména pro každé pole je uložena v proměnné relace a po odeslání formuláře (Sabmitic došlo), systém generuje nové názvy náhodných polí. To znamená, že pokud chce útočník učinit útok, bude muset znát tyto náhodné názvy pole formuláře.
Například požadavek, který se to zdá takto

Bude to vypadat takto:

Kroky
Toto je hlavní soubor, který bude obsahovat všechny metody nezbytné pro zabránění útokům CSRF.

Tato funkce přijímá ID klíče (token) z proměnné relace, pokud ještě nebyla vytvořena, generuje náhodné token.
Public Function Get_Token_ID () {If ($ _ relace [`token_id`])) {RETURN $ _Session [`token_id`] -} else {$ token_id = $ tohle->Náhodné (10) - $ _ relace [`token_id`] = $ token_id-return $ token_id-}}

Tato funkce přijímá hodnotu tokenu, pokud hodnota ještě nebyla generována, pak je generována.
Public Function Get_token () {IF (ISSET ($ _ S relace [`Token_Value`]) {Return_Value] -} else {$ token = hash (`sha256`, $ to->Náhodné (500)) - $ _ Session [`token_value`] = $ token-návrat $ token-}}

Tato funkce kontroluje platnost ID a tokenu. Kontrola nastane porovnáním hodnot získaných při získávání nebo odeslání dotazů s hodnotami proměnné relace uživatele.
Veřejná funkce Check_Valid ($ Metoda) {IF ($ metoda == `Post` || $ metoda == `GET`) {$ Post = $ _Post- $ get = $ _get-jestliže ({} $ {$ metoda} $ Tohle->get_tomoken_id ()]) && ($ {$ metoda} [$ to->get_tomoken_id ()] == $ to->get_token ())) {návrat true-} else {return false-}} else {return false-}}

Jedná se o druhou ochranu proti Útokům CSRF popsaných v tomto článku. Tato funkce generuje náhodná jména pro pole formuláře.
Veřejná funkce Form_Names ($ jmen, $ Regenerate) {$ hodnoty = Array () - Formue ($ jmen jako $ n) {IF ($ regenerate == true) {unset ($ _ relace [$ n]) -} $ s = emitet ($ _ session [$ n]) ? $ _Session [$ n]: $ tohle->Náhodné (10) - $ _ relace [$ n] = $ S- $ hodnoty [$ n] = $ s-} Zpět $ hodnota-}

Tato funkce generuje náhodný řetězec pomocí náhodného Linux FAL pro větší chaotickou hodnotu hodnot.
Private Function Random ($ LEN) {FUNKCE_EXISTS (`OPENSSL_RANDOM_SEUDO_BYTES`)) {$ BYTELEN = INTVAL (($ LEN / 2) + 1) - $ návrat = substr (bin2hex (openSsl_random_peneudo_byetes ($ byten), 0, $ len) -} elseif (@is_hreadable (`/ dev / urandom`)) {$ f = fopen (`/ dev / urandom`, `r`) - $ urandom = fread ($ f, $ len) -fclose ($ f) t - $ návrat = `` -}, pokud (prázdný ($ návrat)) {for ($ i = 0- $ i<$ Len - ++ $ i) {if (!ISSET ($ URANDOM)) {if ($ i% 2 == 0) {mt_srand (čas ()% 2147 * 1000000 + (dvojité) mikrotime () * 1000000) -} $ rand = 48 + mt_rand ()% 64- } else {$ rand = 48 + ord ($ urandom [$ i])% 64-} Pokud ($ rand)>57) $ rand + = 7-if ($ rand>90) $ rand + = 6-if ($ rand == 123) $ rand = 52-if ($ rand == 124) $ rand = 53- $ návrat.= Chr ($ rand) -}} Návrat $ návrat-}

Tím bude dokončena třída CSRF.
}
Tyto kroky vám ukáží, jak používat třídu CSRF pro ochranu proti útokům CSRF.

Níže uvedený kód zobrazuje použití CSRF třídy pro formulář.