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

Obrázek s názvem passwordscsrf.jpg

Bude to vypadat takto:

Obrázek s názvem ProtectedRequestcsrf.jpg

Kroky

Metoda 1 z 2:
Vytvoření souboru CSRF.Třída.php

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

  1. Obrázek s názvem 2543022 1
jeden. Vytvořte soubor CSRF.Třída.php.Začněte vytvořením souboru a uložte jej následujícím obsahem:

Veškerý kód v této části příručky budou přidány na konci tohoto souboru.
  • Obrázek s názvem 2543022 2
    2. Vytvořit metodu get_tomoken_id ().
    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-}}
  • Obrázek s názvem 2543022 3
    3. Vytvořit metodu get_token ().
    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-}}
  • Obrázek s názvem 2543022 4
    4. Vytvořit metodu check_valid ().
    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-}}
  • Obrázek s názvem 2543022 5
    Pět. Vytvořit metodu Form_Names ().
    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-}
  • Obrázek s názvem 2543022 6
    6. Vytvořit náhodnou () metodu.
    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-}
  • Obrázek s názvem 2543022 7
    7. Dokončete koncový závorku.
    Tím bude dokončena třída CSRF.

    }
    Nyní můžete zavřít soubor CSRF.Třída.PHP, protože jsme s ním skončili.
  • Metoda 2 z 2:
    Ochrana stránky s CSRF.Třída.php

    Tyto kroky vám ukáží, jak používat třídu CSRF pro ochranu proti útokům CSRF.

    Obrázek s názvem 2543022 8
    jeden. Forma obrany.
    Níže uvedený kód zobrazuje použití CSRF třídy pro formulář.

    Podobné publikace