Postman 中設定自動處理 Laravel CSRF Token 的方法

前言

在使用 Laravel 框架進行 API 開發時,通常會遇到 CSRF 防護的需求。而透過 Postman 來測試這類 API 時,若未妥善處理 CSRF Token,可能導致請求被拒絕。接下來將介紹如何在 Postman 中設定自動處理 CSRF Token,確保測試過程順暢

什麼是 CSRF

CSRF(跨站請求偽造,Cross-Site Request Forgery)是一種攻擊手法,攻擊者誘騙已登入的使用者,在不知情的情況下,向網站發送惡意請求。Laravel 框架會透過 CSRF Token 來防止這類攻擊

Laravel 預設會產生一個名為 XSRF-TOKEN 的 Cookie,每次請求時需要帶上此 Cookie 的值作為 X-XSRF-TOKEN Header,否則請求會被 Laravel 拒絕

設定 Postman 處理 CSRF Token 的步驟

Step 1:建立環境變數(Environment)

  • 在 Postman 中點擊左上角的「Environment」按鈕,新增一個環境(例如命名為 local)。
  • 設定變數 BASE_URL,初始值為你的 API 網址,例如:http://localhost:8000
  • 選取剛建立的環境,後續所有請求都會使用此設定。

Step 2:自動取得並設定 X-XSRF-TOKEN

在 Collection 中加入 Pre-request Script(在請求前自動執行的腳本),自動取得 CSRF Token 並設定到 Header 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
pm.sendRequest({
url: pm.environment.get("BASE_URL"),
method: 'GET'
}, function (err, response) {
if (err) {
console.error("無法取得 XSRF-TOKEN:", err);
return;
}

const xsrfToken = extractXsrfToken(response.headers);
if (xsrfToken) {
pm.request.headers.add({ key: "X-XSRF-TOKEN", value: xsrfToken });
console.log("已設定 X-XSRF-TOKEN:", xsrfToken);
}
});

// 提取 XSRF-TOKEN 的函數
function extractXsrfToken(headers) {
const cookieHeader = headers.find(item => item.key === 'Set-Cookie' && item.value.startsWith('XSRF'))?.value || '';

if (!cookieHeader) {
console.warn("未找到 Set-Cookie 標頭。");
return null;
}

const match = cookieHeader.match(/XSRF-TOKEN=([^;]+);/);
if (!match) {
console.warn("Cookie 中未找到 XSRF-TOKEN。");
return null;
}

return decodeURIComponent(match[1]);
}

備註: 以上腳本會在每個請求發送前自動執行,確保每次請求的 CSRF Token 都是最新的

Step 3:登入請求範例

  • 發送一個登入請求測試,例如:
1
2
3
4
5
6
7
POST {{BASE_URL}}/api/login

Body (JSON):
{
"username": "user",
"password": "password"
}

因為已設定自動處理 X-XSRF-TOKEN,因此此請求會自動附帶最新的 CSRF Token,避免 Laravel 阻擋請求

結論

透過這樣的簡單設定方式,就能輕鬆處理 CSRF Token,讓開發及測試變得更加方便與流暢。

Reference