Cross-site request forgery(CSRF)

接續上次提到的XSS問題,CSRF是另一項比較容易被忽略或誤解的一種安全問題,多數的例子看似URL設計失誤,實際上,是單純信任瀏覽器,忽略使用者身分確認機制的結果。

CSRF 是一種 Web 上的攻擊手法,全稱是 Cross Site Request Forgery,中文稱做跨站請求偽造。

詳細的理論基礎,就不詳述了,其核心在於有機會發生使用者在未登入的情況下,點了其他網站,造成別人有機會可以用此連結在非本人的情況下送出Request進行攻擊,因此,Server端必須有一些防範和檢驗的機制,來確認送出此Request的人是登入者本人,有點像是API的驗證機制。

加上 CSRF token

ASP.net 上的做法

為了避免這樣的情況發生,我們可以在 View 頁面的Form表單中加入「@Html.AntiForgeryToken」,然後在對應的 Action 方法上標註「ValidateAntiForgeryToken」Attribute, 原始碼會是以 Hidden 欄位放置 Token。

Cookie也會以「__RequestVerificationToken」來放置 Request Verification Token

Laravel上的做法

Laravel 通過自帶的 CSRF 保護中間件讓避免應用遭到跨站請求偽造攻擊,Laravel 會自動為每一個有效用户會話生成一個 CSRF token,然後將該Token存放在 Session 中,用於驗證授權用户和發起請求者是否是同一個人。