XSS ( Cross-Site Scripting ) 與 CSRF ( Cross-Site Request Forgery ) 都是網站應用程式中的安全漏洞,它們可能會對使用者和應用程式的安全性造成威脅。
- XSS ( Cross-Site Scripting )
- 攻擊者通過輸入惡意的客戶端腳本代碼到目標網站的輸出中,當其他用戶訪問到該網站時,這些腳本便會執行。
- 攻擊者可以獲取使用者的敏感訊息,修改網站的內容,或執行其他不當操作,可能對用戶遭成嚴重損害。
舉個例子來說,有個網站有留言區,並且留言區會顯示在畫面上,惡意攻擊者留下了一段程式碼
<script>
alert();
</script>
若沒有進行過濾的話,便會執行 script 裡面的內容了!
防範的方法:
- 使用輸出編碼: 將要輸出到網頁的數據進行編碼,以防止腳本的注入。常見的方法有: HTML Entity Encoding、JavaScript Encoding
- 設置 Content Security Policy ( CSP ): CSP 是一種 HTTP 標頭,可以限制網頁上載入的資源和執行的腳本。
- 輸入驗證、過濾: 對於接收到用戶的輸入,進行驗證及過濾,只允許合法的內容通過。
這邊有個有趣的 XSS 練習網站 https://xss-game.appspot.com/
各位可以玩看看!
- CSRF ( Cross-Site Request Forgery ):
- 攻擊者通過誘導的方式,讓使用者在登入狀態下執行未經授權的操作,通常都是在受害者不知情的情況下,向網站發送偽造的請求。
- 這種攻擊會導致用戶執行不當操作,如: 更改密碼、執行金融交易等等。
舉個例子來說,假設一個用戶已經登入了他的銀行網站,並且未登出,攻擊者創建了一個偽造的網頁,其中包含以下代碼:
<form action="https://銀行網站.com/change-password" method="POST">
<input type="hidden" name="new-password" value="惡意密碼">
<input type="submit" value="點擊此處免費領取獎品">
</form>
<script>
document.forms[0].submit(); // 自動提交表單
</script>
當使用者按下按鈕之後,密碼就會被更改了。
防範的方法:
- 使用 CSRF Token: 將隨機生成的 CSRF token 包含在每一個重要的網站請求中,並在伺服器驗證該 token。
- 驗證 HTTP Referer Header: 檢查 HTTP Referer 的首部,確定請求來自預期的網站。
- 使用 SameSite Cookie 屬性: 將 SameSite 屬性設置為 Strict or Lax,限制第三方網站對 Cookie 的存取。
以上是 XSS、CSRF的介紹! 那我們明天見。