如何防止XSS攻擊

xss = getParameter("redirect_to").startsWith('javascript:');allowSchemes = ["http", "https"];

用戶點擊這個 URL 時,服務端取出請求 URL,拼接到 HTML 響應中:


  • 瀏覽器接收到響應後就會加載執行惡意腳本 //xxxx.cn/image/t.js,在惡意腳本中利用用戶的登錄狀態進行關注、發微博、發私信等操作,發出的微博和私信可再帶上攻擊 URL,誘導更多人點擊,不斷放大攻擊範圍。這種竊用受害者身份發佈惡意內容,層層放大攻擊範圍的方式,被稱為“XSS 蠕蟲”。

    XSS攻擊擴展閱讀:Automatic Context-Aware Escaping

    上文我們說到:

    1. 合適的 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/templateGoogle Closure Templates

    原文地址:https://zhuanlan.zhihu.com/p/45568315

    作者介紹 李陽,美團點評前端工程師。


    分享到:


  • 相關文章: