添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
威武的单杠  ·  UUID、GUID、SID、SUSID - ...·  4 月前    · 
老实的伏特加  ·  3_20211101CSharpArrayS ...·  1 年前    · 
八块腹肌的毛衣  ·  go reflect Elem() ...·  1 年前    · 
tags: 2019鐵人賽 Laravel CSRF

對於一個初學 Laravel 的人,如果要嘗試送出 POST 請求,第一個遇到的問題大部分都是 CSRF。那麼什麼是 CSRF?又該怎麼解呢?官方文件有寫解法,但是主要是針對 web 端的做法。
而我們身為一個後端工程師,測試 API 最快的方法就是使用 POSTMAN (至於 POSTMAN 怎麼用,請自己上網找吧),POSTMAN 再送請求的時候都要自己添加 header 和 body,所以在遇到 CSRF 的時候,會不知道自己要放什麼。今天就來告訴大家怎麼用 POSTMAN 來解決 CSRF 問題。

CSRF 是什麼?

跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF,是一種挾制用戶在當前已登錄的Web應用程式上執行非本意的操作的攻擊方法。[1] 跟跨網站指令碼(XSS)相比,XSS 利用的是用戶對指定網站的信任,CSRF 利用的是網站對用戶網頁瀏覽器的信任。

我節錄一個重點:
攻擊者並不能通過CSRF攻擊來直接獲取用戶的帳戶控制權,也不能直接竊取用戶的任何資訊。他們能做到的,是欺騙用戶瀏覽器,讓其以用戶的名義執行操作。

CSRF - 維基百科

看的有點糢糊沒關係,
我舉個例子,假設阿美在自己加登入銀行執行轉賬動作,如果伺服器端因為已經確認過阿美的帳號密碼,就同意這次操作。同一時間在另外一邊,有一個壞蛋阿寶,趁著阿美還在登入狀態,也模仿一個銀行轉賬的網路請求,那麼伺服器要怎麼判定這次操作是不是阿美執行的?答案就是透過 session!

Laravel 內建 CSRF token

Laravel 透過應用程式自動產生一個 CSRF「token」來管理每個活躍的使用者 session。這個 token 用於驗證已認證使用者是否實際向應用程式發出請求。

  • 我們找到 vender/laravel/framework/src/Illuminate/Session/Store.php 這支檔案,可以知道每次進入 laravel 專案的時候,都會檢查 session 中 _token 是否存在,如果不存在就會呼叫 regenerateToken 重新生成一個 token
        public function start()
            $this->loadSession();
            if (! $this->has('_token')) {
                $this->regenerateToken();
            return $this->started = true;
    regenerateToken 實作內容,即隨機產生亂數字元。
  •     public function regenerateToken()
            $this->put('_token', Str::random(40));
    
  • 實際用 POSTMAN 看看伺服器是不是真的有回傳 token
  •