Laravel CSRF保護(hù)
csrf指的是跨網(wǎng)站偽造攻擊網(wǎng)絡(luò)應(yīng)用程序。csrf攻擊是系統(tǒng)的經(jīng)過(guò)身份驗(yàn)證的用戶執(zhí)行的未經(jīng)授權(quán)的活動(dòng)。因此,許多web應(yīng)用程序都容易受到這些攻擊。
laravel以下列方式提供csrf保護(hù) -
laravel包含一個(gè)內(nèi)置的csrf插件,可為每個(gè)活動(dòng)用戶會(huì)話生成令牌。這些令牌會(huì)驗(yàn)證操作或請(qǐng)求是否由有關(guān)的已驗(yàn)證用戶發(fā)送。
履行
本節(jié)詳細(xì)討論了在laravel中實(shí)施csrf保護(hù)。在繼續(xù)進(jìn)行csrf保護(hù)之前,以下幾點(diǎn)值得注意 -
- csrf在web應(yīng)用程序中聲明的html表單中實(shí)現(xiàn)。您必須在表單中包含隱藏的經(jīng)過(guò)驗(yàn)證的csrf令牌,以便laravel的csrf保護(hù)中間件可以驗(yàn)證請(qǐng)求。語(yǔ)法如下所示 -
{{ csrf_field() }} ...
- 您可以使用javascript http庫(kù)方便地構(gòu)建javascript驅(qū)動(dòng)的應(yīng)用程序,因?yàn)檫@包括csrf令牌給每個(gè)傳出的請(qǐng)求。
- 文件 resources / assets / js / bootstrap.js 注冊(cè)了laravel應(yīng)用程序的所有標(biāo)記,并包含 meta 標(biāo)記,它存儲(chǔ)了帶有 axios http庫(kù)的 csrf標(biāo)記 。 **
沒有csrf令牌的表單
考慮以下幾行代碼。他們展示了一個(gè)表單,它以兩個(gè)參數(shù)作為輸入: 電子郵件 和 消息 。
email message
上面顯示的表格將接受來(lái)自授權(quán)用戶的任何輸入信息。這可能會(huì)使web應(yīng)用程序容易受到各種攻擊。
請(qǐng)注意,提交按鈕包含控制器部分的功能。所述 后接觸 功能在控制器為該關(guān)聯(lián)視圖使用。如下所示 -
public function postcontact(request $request){ return $request-> all(); }
請(qǐng)注意,表單不包含任何csrf令牌,因此作為輸入?yún)?shù)共享的敏感信息容易受到各種攻擊。
帶有csrf令牌的表單
以下幾行代碼向您展示了使用csrf令牌重新設(shè)計(jì)的表單 -
{{ csrf_field() }} email message
實(shí)現(xiàn)的輸出將返回帶有如下所示令牌的json -
{ "token": "ghfleifxdsuyew9we67877cxnvfjkl", "name": "codingdict", "email": "contact@codingdict.com" }
這是單擊“提交”按鈕時(shí)創(chuàng)建的csrf標(biāo)記。