您好,登錄后才能下訂單哦!
這篇文章主要介紹laravel中表單偽造與CSRF保護的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
我們知道,目前最流行的API設計規范就是restFul API設計了。restful有五種常見的HTTP方法,即:get、post、put、patch及delete。使用html表單非常容易構造get或post方法,但是另外三種方法卻不支持。但是在laravel中,你可以通過表單偽造技術來使用上述的其他三種方法。
準備工作
首先我們要把準備工作做好。我們需要創建兩個路由:一個表單路由,一個接受表單的路由。
// 表單頁 Route::get('form', function () { return view('form'); }); // 接受表單請求 Route::any('getform', function () { return \Illuminate\Support\Facades\Request::method(); });
剛開始,我們弄一個最簡單的get請求表單,內容如下:
<form method="get" action="/getform"> <input type="submit" value="sub" /> </form>
點擊提交按鈕后,瀏覽器出現'GET',表示get請求成功發送并被接受。
CSRF保護
然后,我們換成post方法,然后刷新點擊提交按鈕,看會出現設么情況。你會發現出現“page expired”,狀態碼為419的錯誤。laravel為什么接受不了post請求?這里就要引出laravel的默認CSRF保護機制了。
laravel為了防止被跨站請求偽造攻擊,提供了CSRF令牌保護,所以,除了get方法請求外的所有方法,讀需要在表單里加上CSRF令牌,如下:
<input type="hidden" name="_token" value="{{csrf_token()}}">
它還有一種簡寫方法,如下:
@csrf
關閉CSRF保護功能
一般不建議關閉整站CSRF功能,想要關閉非常簡單,只需將Kernel.php文件中的
\App\Http\Middleware\VerifyCsrfToken::class
這行注釋即可。
CSRF 白名單
經常我們需要設置一組不需要CSRF保護的URL,比如對第三方提供的API接口,我們希望所有對外的API接口都不需要CSRF保護。那么,可以通過CSRF白名單的功能,設置白名單在app/Http/Middleware/VerifyCsrfToken.php文件操作。如下:
class VerifyCsrfToken extends Middleware { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ /* 這里是白名單列表 */ 'http://example.com/api/*', 'api/*', 'a/b/*' ]; }
注意:為方便測試,當測試環境時,csrf功能會自動關閉
表單偽造
學完了CSRF保護機制后,我們來看看如何進行表單偽造。想要偽造表單也非常的簡單,只需要在表單里添加
<input type="hidden" name="_method" value="PUT">
或簡寫成
@method('PUT')
下面是一個偽造put請求的表單
<form method="post" action="/getform"> @csrf @method('PUT') <input type="submit" value="sub" /> </form>
以上是“laravel中表單偽造與CSRF保護的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。