# 前言
學習一個框架, Ray 的想法是, 在深入理解底層實作的原理之前, 應該先知道這個框架的 使用方法
; 先學習怎麼使用這個前人造的輪子, 再學習怎麼樣造一個輪子。
所以本篇文章重點在於細讀官方文件, 並將內容理解後以 Q&A 的方式記錄下來, 加速學習以及查詢。
# Introduction
CSRF 的全寫是?
CSRF 是什麼?
利用使用者的 token 或 cookie 送出不合法的請求, 藉此更改使用者在後端的資料或其他惡意的動作。
以下的 Laravel example code 的意思是?
- Example:
<form method="POST" action="/profile">
@csrf
...
</form> - Answer:
在 form 表單中附加 CSRF token, 當表單提交時會帶回該 CSRF token, server 會比對該 token 是否是 server 發出以判斷該 form 表單的來源是否可信
Laravel 中, 哪一個 middleware 會去檢驗 form 裡頭的 CSRF token 是否正確?
VerifyCsrfToken
# CSRF Token & JavaScript
Laravel 中, 哪個檔案中有提供 Axios HTTP library, 可以自動的將 XSRF_TOKEN
cookie 的值利用 X-XSRF-TOKEN
header 發送?
resources/js/bootstrap.js
# Excluding URLs From CSRF Protection
以下的 Laravel example 是什麼意思?
- Example:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
protected $except = [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
} - Answer:
在 $except property 中的 url 將不會被 VerifyCsrfToken middleware 驗證
Laravel 中, 在 tests 中, CSRF middleware 還會運作嗎?
不會
# X-CSRF-TOKEN
Laravel VerifyCsrfToken middleware 除了會從 POST parameter 中檢查 CSRF token 之外, 還會從哪裡檢查?
request 的 X-CSRF-TOKEN
header
Laravel 中, 我可以將 CSRF token 發到 HTML 的哪一個 tag?
meta
以下的 Laravel 中的 HTML 程式碼的意思是?
- Example:
<meta name="csrf-token" content="{{ csrf_token() }}">
- Answer:
將 csrf token 放到 meta tag 中
以下的 Laravel 中使用 AJAX 的程式碼的意思是?,
- Example:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
}); - Answer:
使用 AJAX 取出 name=”csrf-token” 的 meta tag, 並將內容設定到 headers ‘X-CSRF-TOKEN’
# X-XSRF-Token
Laravel 預設會將 CSRF token 存在 Response 的哪?
XSRF_TOKEN
cookie
Laravel 中, 前端可以從哪一個 cookie 中來設定 X-XSRF-TOKEN
?
XSRF-TOKEN
cookie
一些 JavaScript 框架, 像是 Angular 以及 Axios, 預設會取 哪個 cookie
中帶入同源請求的 哪個 header 中
?
XSRF-TOKEN
cookieX-XSRF-TOKEN
header
留言