iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
Modern Web

PHP框架-Symfony4 + api platform 系列 第 28

Day#28 Cookie & SameSite Cookie 和 安裝API test 前置作業

  • 分享至 

  • xImage
  •  

cookie是什麼,能吃嗎? ,
不是那個cookie啦,是瀏覽器用來暫時存放使用者資料的東西

那 sameSite cookie 又是什麼 !!?
sameSite 是用來阻止瀏覽器將Cookie跨網站發送的屬性


Samesite 有三個值可以設定

1.None : 無論sameSite CrossSite的Request上 , 都可以帶有該cookie

2.Strict : 僅限sameSite的Request,才能帶有該cookie

3.Lax : 全部的sameSite Request 及部分的crooSite Request ,可以帶有該cookie

詳情請看這

https://medium.com/@azure820529/chrome-80-%E5%BE%8C%E9%87%9D%E5%B0%8D%E7%AC%AC%E4%B8%89%E6%96%B9-cookie-%E7%9A%84%E8%A6%8F%E5%89%87%E8%AA%BF%E6%95%B4-default-samesite-lax-aaba0bc785a3

在cookie policy 更新前 , sameSite的預設都是None ,
但為了提升網路安全 , Google便提出將預設的none改為lax

如何來設定我們的sameSite Cookie 呢 ?
首先! 打開config目錄下的子目錄packages裡的framework.yaml

接著會看到session , 可以將底下的cookie_samesite 改為你要的值 none strict or lax ,
session底下也可以設定cookie的存活時間

framework:
    secret: '%env(APP_SECRET)%'
    session:
        handler_id: ~
        cookie_secure: auto
        cookie_samesite: lax
        cookie_lifetime: 36000
    php_errors:
        log: true

lifetime 是以毫秒來計算

簡單介紹完sameSite Cookie 後 , 要來進入 CSRF 攻擊的部分了,
簡單來說 ,就是別人利用你的cookie or session 做他想做的事情,任何事都有一體兩面的嘛..
你要方便記錄使用者的資料 , 卻也會被有心人士拿去利用,
就像為什麼當防毒軟體更進化, 病毒就要更進化一樣,因為這樣才有錢賺阿...
阿..不是啦~ 我要說的是科技雖然方便,且不斷地在進步,但卻同時存在著風險 !

cookie 設定的方式有四種,其中兩個是比較危險的

  • API Tokens : 可能被別的js竊取
  • HttpOnly Cookies : 容易遭受CSRF攻擊
  • SameSite Cookies : 幾乎所有瀏覽器都可以使用
  • CSRF Tokens : 較為複雜

通常防禦CSRF攻擊的方式有兩種

1.檢查referer欄位 , http referer欄位裡會記錄發出請求的網站 , 可以檢查如果不是我們要的網站,一律不接受

2.加入驗證token ,也就是上述提到的CSRF Tokens

詳情請看這

https://medium.com/@Tommmmm/csrf-%E6%94%BB%E6%93%8A%E5%8E%9F%E7%90%86-d0f2a51810ca

sameSite Cookie 跟 CSRF 簡單介紹完 ,
我們要先來為下一篇的API test 做準備,來把前置作業先弄完 !!


首先 , 我們要先執行以下指令來安裝test元件

composer require test --dev

安裝完以後 , 專案目錄裡會看見一個.env.test的檔案,裡面可以針對test環境來設定dataBase

設定完後,執行以下兩個指令來建立database和schema

php bin/console doctrine:database:create --env=test
php bin/console doctrine:schema:create --env=test

Api Test的前置作業也完成了~~
接下來!! 下一篇會先簡單說明Request的生命週期,
再來會寫一個簡單驗證登入的Test,並且寫成共用的test function 來達成方法重用性 ~


上一篇
Day#27 在json_login驗證傳來的資料及將回傳的格式改為IRI
下一篇
Day29# 建立創建使用者及登入的共用API test function
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言