XSS(跨站腳本攻擊)
https://www.cloudflare.com/zh-tw/learning/security/threats/cross-site-scripting/
前言
允許攻擊者將惡意腳本注入到網頁中,然後在受害者的瀏覽器中執行。攻擊者將代碼附加到合法網站上,當受害者載入網站時,代碼就會執行。惡意代碼可以透過幾種方式插入。最常見的是新增到 URL 的末尾,或者直接發佈到顯示使用者所產生內容的頁面上。用更專業的詞彙來說,Cross-site scripting 是一種用戶端代碼插入攻擊。
反射式 Cross-site scripting
這是最常見的 Cross-site scripting 攻擊。透過反射攻擊,惡意代碼被新增到網站 URL 的末尾;通常,這是一個合法的、值得信賴的網站。當受害者在 Web 瀏覽器中載入此連結時,瀏覽器將執行插入到 URL 中的代碼。攻擊者通常使用某種形式的社交工程來誘騙受害者點擊連結。
例如,使用者可能會收到一封看起來合法的電子郵件,聲稱來自銀行。該電子郵件將要求使用者在銀行的網站上執行一些動作,並提供一個連結。該連結可能看起來像這樣:
http://legitamite-bank.com/index.php?user=<script>here is some bad code!</script>
持久性 Cross-site scripting
持久性 Cross-site scripting 發生的網站通常會允許使用者發佈其他使用者可看到的內容,例如評論論壇或社交媒體網站。如果網站沒有正確驗證使用者所產生內容的輸入,攻擊者可以插入代碼,當頁面在其他使用者的瀏覽器中載入時,瀏覽器將執行該代碼。例如,攻擊者可能會存取一個線上約會網站,在他們的設定檔中放置如下內容:
"Hi! My name is Dave, I enjoy long walks on the beach and <script>malicious code here</script>"
總結
盡可能避免在輸入中使用 HTML:避免持久性 Cross-site scripting 攻擊的一種非常有效的方法是防止使用者將 HTML 發佈到表單輸入中。有一些其他選項可以讓使用者在不使用 HTML 的情況下建立豐富的內容,例如 markdown 和 WYSIWYG 編輯器。
驗證輸入:驗證意味著實作規則,以防止使用者將資料發佈到不符合某些準則的表單中。例如,要求輸入使用者「姓氏」的輸入應具有驗證規則,只允許使用者提交包含英數字元的資料。驗證規則也可以設定為拒絕 Cross-site scripting 中常用的任何標記或字元,例如
「<script>
」標記。
清理資料:清理資料與驗證相似,但是它發生在資料發佈到 Web 伺服器之後、顯示給其他使用者之前。有幾種線上工具可以清除 HTML 並篩除惡意代碼插入。
採取 cookie 安全措施:Web 應用程式還可以為其 cookie 處理設定特殊規則,從而緩解透過 Cross-site scripting 攻擊進行的 cookie 盜竊。Cookie 可以綁定到特定的 IP 位址,以便 Cross-site scripting 攻擊者無法存取它們。此外,還可以乾脆建立規則來阻止 JavaScript 存取 Cookie。
設定 WAF 規則:WAF 也可以設定為強制執行規則,以防止反射性 Cross-site scripting。這些 WAF 規則採用策略封鎖對伺服器的奇怪要求,包括 Cross-site scripting 攻擊。Cloudflare WAF 提供周全的安裝,可保護 Web 應用程式免受 Cross-site scripting 攻擊、DDoS 攻擊、SQL 資料隱碼攻擊和其他常見威脅的侵害。