如昨天說的一樣,今天就是XSS的最後一部份,接下來會進到path traversal
不管是reflected XSS, DOM based XSS還是Stored XSS基本上都是因為資料進入到前端時沒有做好處理,讓放入到前端的時候被誤認成要執行的腳本,從而被攻擊成功,所以防護方面主要聚焦在進入前端的資料處理方面,同時再加幾道額外防禦
由於前端輸出是被突破的關鍵點,所以我們當然要先從這裡下手了,既然瀏覽器看到<script></script>就會把它認成腳本,那我們就嘗試把它轉換成文字的樣子,一般來說會使用HTML實體編碼(HTML Entities),這樣在處理的時候瀏覽器就會把他視為純文字,從而安全的進行處理並渲染< = <> = >& = &" = "' = '/ = /
之前在XSS範例的時候也看到了,滲透者可以使用腳本獲得受害者的document.cookie,也就是cookie的信息,所以我們要在cookie上面加一個HttpOnly屬性,讓cookie被鎖住不讓JavaScript腳本讀取,降低滲透者攻擊成功時的傷害
DOM based XSS的部分除了讓輸出時做跳脫,也要注意不能使用不安全的寫法,如在寫純文字內容時不該使用innerHTML這種不安全的寫法,可以改成使用textContent
除了以上這些,也要架設CSP作為最後防線,使用HTTP Header限制網站前端只能載入並執行受信任的腳本來源,讓網頁看到網頁設計者白名單外的腳本輸入時自動拒絕