Како да се заштити од напади со користење на барање за мешање (csrf) во php
Нападот со користење на лажни (CSRF) е тип на ранливост на веб апликации кога жртвата ненамерно ја започнува сценариото во својот прелистувач, која ја користи тековната сесија на овластениот корисник на одредена локација. CSRF напади може да се направи преку Get или Post барања. Оваа статија ќе ви покаже како да ја заштитите вашата веб апликација од нападите на CSRF.
Метод
Ние ќе користиме два методи за заштита од напади на CSRF на вашите GET и POST барања.
Првиот метод е да се користи случаен клуч. Со секое барање, ова е единствена линија генерирана за секоја сесија. Ние го генерираме клучот, а потоа го претвораме во секоја форма во форма на скриено поле. Следно, системот ја проверува валидноста на формуларот, споредувајќи го клучот и вредноста складирана во променливата сесија на корисникот. Тоа е, ако напаѓачот сака да генерира барање, тој ќе треба да ја знае клучната вредност.
Вториот метод е употребата на случајни имиња за секоја форма на форма. Вредноста на случајно име за секое поле е зачувана во променливата на сесија и по испраќањето на образецот (се случи Sabmitic), системот генерира нови случајни имиња на поле. Тоа е, ако напаѓачот сака да направи напад, тој ќе треба да ги знае овие случајни имиња на полињата за форма.
На пример, барањето што го направило тоа

Тоа ќе изгледа вака:

Чекори
Ова е главната датотека која ќе ги содржи сите методи потребни за да се спречи нападите на CSRF.

Оваа функција добива клучна идентификација (токен) од променливата на сесија, ако сè уште не е креирана, таа генерира случаен токен.
Јавна функција GET_TOKEN_ID () {Ако (Isset ($ _ сесија [`token_id`])) {Врати $ _SESSION [`token_id`] -} {$ token_id = $ Ова->Случаен (10) - $ _ сесија [`token_id`] = $ token_id-return $ token_id-}}

Оваа функција добива токен вредност, ако вредноста сè уште не е генерирана, тогаш таа е генерирана.
Јавна функција get_token () {ако (isset ($ _ сесија [`token_value`]) {return_value] -}} {$ token = hash (`sha256`, $ ова->Случаен (500)) - $ _ сесија [`token_value`] = $ token-враќање $ token-}}}}}}}}}}

Оваа функција проверки на идентификација валидност и токен. Проверката се јавува со споредување на вредностите добиени кога добиваат или објавуваат пребарувања со вредностите на променливата на сесија на корисникот.
Јавна функција Check_Valid ($ метод) {Ако ($ метод == "Пост" || $ media == `get`) {$ post = $ _POST- $ get = $ _GET-Ако ($ {$ member} [ $ Ова->get_token_id ()]) && ($ {$ метод} [$ ова->get_token_id ()] == $ ова->get_token ())) {Врати Вистинско-} {Врати лажно-}}} {Врати лажно-}}

Ова е втора заштита против нападите на CSRF опишани во овој напис. Оваа функција генерира случајни имиња за полиња за форма.
Форма на јавни функции ($ Имиња, $ Регенерира) {$ вредности = низа () - foreach ($ Имиња како $ n) {ако ($ REGENERERERE == TRUE) {UNFECT ($ _ сесија [$ n]) -} $ s = isset ($ _ сесија [$ n]) ? $ _Session [$ n]: $ ова->Случаен (10) - $ _ сесија [$ n] = $ s- $ вредности [$ n] = $ s-} се врати $ вредности-}

Оваа функција генерира случајна низа со користење на случаен Линукс ФАЛ за поголема хаотична вредност на вредностите.
Приватни функција Случаен ($ len) {function_exists (`openssl_random_seudo_bytes`) {$ bytelen = Intval (($ Len / 2) + 1) - $ REVER = SUBSTR (Bin2Hex (OpenSsl_Random_peneudo_byetes ($ byten)), 0, $ len) -} estrif (@is_readable (`/ dev / arandom`)) {$ f = fopen (`/ dev / arandom`, `r`) - $ URANDOM = FRAD ($ F, $ Len) -Fclose ($ F) - $ враќање = `` -} ако (празен ($ се врати)) {за ($ i = 0- $ i<$ Len - ++ $ i) {ако (!ISSET ($ URANDOM)) {Ако ($ i% 2 == 0) {mt_srand (време ()% 2147 * 1000000 + (двојно) микротима () * 1000000) -} $ rand = 48 + mt_rand ()% 64- } друго {$ rand = 48 + ord ($ urandom [$ i])% 64-} Ако ($ rand>57) $ rand + = 7-ако ($ rand>90) $ RAND + = 6-IF ($ RAND == 123) $ RAND = 52-IF ($ RAND == 124) $ RAND = 53- $ Враќање.= CHR ($ rand) -}} Врати $ return-}

Ова ќе ја заврши CSRF класата.
}
Овие чекори ќе ви покажат како да користите CSRF класа за заштита од CSRF напади.

Кодот подолу ја прикажува употребата на CSRF класата за формата.