xss = getParameter("redirect_to").startsWith('javascript:');allowSchemes = ["http", "https"];>>
用戶點擊這個 URL 時,服務端取出請求 URL,拼接到 HTML 響應中:
瀏覽器接收到響應後就會加載執行惡意腳本 //xxxx.cn/image/t.js ,在惡意腳本中利用用戶的登錄狀態進行關注、發微博、發私信等操作,發出的微博和私信可再帶上攻擊 URL,誘導更多人點擊,不斷放大攻擊範圍。這種竊用受害者身份發佈惡意內容,層層放大攻擊範圍的方式,被稱為“XSS 蠕蟲”。
擴展閱讀:Automatic Context-Aware Escaping
上文我們說到:
- 合適的 HTML 轉義可以有效避免 XSS 漏洞。
- 完善的轉義庫需要針對上下文制定多種規則,例如 HTML 屬性、HTML 文字內容、HTML 註釋、跳轉鏈接、內聯 JavaScript 字符串、內聯 CSS 樣式表等等。
- 業務 RD 需要根據每個插入點所處的上下文,選取不同的轉義規則。
通常,轉義庫是不能判斷插入點上下文的(Not Context-Aware),實施轉義規則的責任就落到了業務 RD 身上,需要每個業務 RD 都充分理解 XSS 的各種情況,並且需要保證每一個插入點使用了正確的轉義規則。
這種機制工作量大,全靠人工保證,很容易造成 XSS 漏洞,安全人員也很難發現隱患。
2009年,Google 提出了一個概念叫做: Automatic Context-Aware Escaping 。
所謂 Context-Aware,就是說模板引擎在解析模板字符串的時候,就解析模板語法,分析出每個插入點所處的上下文,據此自動選用不同的轉義規則。這樣就減輕了業務 RD 的工作負擔,也減少了人為帶來的疏漏。
在一個支持 Automatic Context-Aware Escaping 的模板引擎裡,業務 RD 可以這樣定義模板,而無需手動實施轉義規則:
{{.title}}
模板引擎經過解析後,得知三個插入點所處的上下文,自動選用相應的轉義規則:
{{.title | htmlescaper}}
目前已經支持 Automatic Context-Aware Escaping 的模板引擎有:
- go html/template
- Google Closure Templates
課後作業:XSS 攻擊小遊戲
以下是幾個 XSS 攻擊小遊戲,開發者在網站上故意留下了一些常見的 XSS 漏洞。玩家在網頁上提交相應的輸入,完成 XSS 攻擊即可通關。
在玩遊戲的過程中,請各位讀者仔細思考和回顧本文內容,加深對 XSS 攻擊的理解。
alert(1) to win
prompt(1) to win
XSS game
閱讀更多 前端嫣然呀呀呀 的文章