資訊安全基礎
某網頁應用程式有一個漏洞:保持登入狀態的使用者若開啟攻擊者準備的陷阱網頁,使用者的瀏覽器就會向正規網站送出使用者並未意圖的匯款或設定變更請求。下列何者是適當的對策?
- A在重要處理的表單中,嵌入每個工作階段都無法預測的隨機值(權杖),收到請求時確認該值是否正確
- B加大密碼輸入欄位的字數上限
- C每天備份網頁伺服器的日誌
查看答案與解析
正確答案:A. 在重要處理的表單中,嵌入每個工作階段都無法預測的隨機值(權杖),收到請求時確認該值是否正確
這個漏洞稱為跨網站請求偽造(CSRF)。瀏覽器向正規網站送出請求時,無論請求是從哪個網頁送出,都會自動附上該網站的Cookie(登入中的工作階段資訊)。因此若伺服器只憑Cookie就判斷是登入使用者的正當操作,從陷阱網頁讓瀏覽器送出的請求也會被接受。對策的基本做法是只在正規的表單中嵌入每個工作階段都無法預測的隨機值(CSRF權杖),並在伺服器端確認該值。陷阱網頁無法得知這個值,因此無法組出正確的請求。此外,也可以用Cookie的SameSite屬性,讓從其他網站送出的請求不附上Cookie,或在匯款等重要操作前要求重新輸入密碼。XSS是在網站中嵌入惡意指令碼,CSRF則是讓使用者的瀏覽器送出看似正當的請求,這一點不同。
- A. 正確。確認陷阱網頁無從得知的權杖,就能只接受來自正規表單的請求。
- B. 輸入欄位的字數上限,與被迫送出非預期的請求無關。
- C. 備份日誌有助於事後調查,但無法防止非預期的請求。