Ray Lee | 李宗叡
Learn or Die
Published in
4 min readDec 9, 2020

--

Photo by Markus Spiske on Unsplash

# 前言

我喜歡使用 Laravel 開發的感覺, 除了開發快速, 程式碼簡潔且優雅之外, Laravel 框架本身也是一個很好的學習參照物。 本篇主要將官方文件重點整理成 Q&A 的形式呈現, 原子化的概念, 這方式並不適用於每個人, 但若對你有幫助, 我會很開心。

# 版本

Laravel 7.x

# 目錄

Laravel — 官方文件原子化翻譯 — 目錄

# Introduction

CSRF 的全寫是?

cross-site request forgery

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 cookie
  • X-XSRF-TOKEN header

--

--

Ray Lee | 李宗叡
Learn or Die

It's Ray. I do both backend and frontend, but more focus on backend. I like coding, and would like to see the whole picture of a product.