Testing for Session Management Schema
web application 有一個機制,就是會將 client 與 server 之間溝通的狀態儲放起來,為了不要每一次請求時都需要登入一次,這個機制就叫作 session management
。
其中cookie
就是最常被用來使用的工具,它是被定義在RFC 2965
中,然後這一章節主要就是要測試它,主要的重點在於 :
所有的 set-cookie 是否有設 secure ?
有任何 cookie 是透過非 https 傳輸或是被強制用 http 傳輸 ?
cookies 的 expires time 合適嗎 ?
有使用 cache-control 來保護 cookie 嗎 ?
Testing for Cookies Attributes
這章節主要是談關安全的 cookie attributes 設置,重點如下 :
secure attribute : 這個地方設置代表要求 cookie 一定要通過 https。
HttpOnly Attribute : 有設置的話,它會義制只能由 http 協來存取,也就是說就無法使用 xss 攻擊,用 script 來抓取 cookie。
Domain Attribute : 它表明了那些 hosts 可能接受 cookie,它會包含 sub domain。
Path Attribute : 上面的 domain 如果設定完,接下就會用 path 來設定這個 cookie 可以用的 path。
Expires Attribute : 這個 cookie 的到期時間。
SameSite Attribute : 主要是為了防止 csrf 攻擊,它有三種值 :
strict : 最嚴格,只有當前的 url 與請求一致,才會帶上 cookie。
lax : 稍微放寬,上面的規則,然後 get 請求除外。
none : 就是不設置。
session fixation 是一種攻擊手法,主要的流程如下 :
攻擊者在網路上取得到有效的 session id。
使用社交工程,讓使用者的瀏覽器 cookie 吃這個 session id。
然後當用戶登入時,就會用這個 session id 進去,然後擊者就可以用這個 session id 看使用者的所有操作。
預防的方法為 :
Testing for Exposed Session Variables
這裡主要是在討論 session 在傳輸時,免受竊聽的重要性,主要的重點在於 :
https。
cache-control。
Testing for Cross Site Request Forgery
csrf 全名叫 Cross Site Request Forgery 跨站請求偽造,上面有提到為了讓我們不用每一次連到畫面時,都需要登入一次,因此有了 session management 機制,會在 client 端儲 cookie,然後 csrf 的手法就是 :
用戶在 a 網站登入後,a 網站設了一個 cookie 儲在用瀏覽器上,到期為 24 小時。
然後在這 24 小時內,用戶又去其它網站走,然後就走到攻擊者設的惡意網頁,然後它會透過這個網站去打 a 網站的 api,來假裝是你。
防止的手法 :
CSRF Token : server 產一個有時效性的 token,在前端需要打我們重要的 api 前,先來取得,然後再帶到 header 中再打那個重要的 api。
SameSite Attribute 設置,限制第三方網站對 cookie 的訪問。
Referrer 設置,服端務檢查 http referer 標頭,確保請求豆法的來源,但有可能被修改。
Access-Control-Allow-Origin 的設置,瀏覽器會先發 preflight 給 server 檢查 domain 是否被允許。