javascript
  • xss
  • 2013-02-07 44 views 3 likes 
    3

    我正在使用一些已報告的舊代碼易受跨站腳本攻擊。該代碼行是使用document.write編寫跨站腳本問題

    document.write("<input type=hidden name=field1 value='" + getCookieValue('fieldval') + "' />"); 
    

    該報告還給出瞭如何將惡意代碼注入頁面的示例。通過更新cookie值爲

    fieldval='><img src=x onerror=alert(1)> 
    

    任何人都可以提供有關如何修復此漏洞的見解嗎?

    +0

    不知道是否這是問題,但是,您需要花費引號和雙引號。 – Toping

    +1

    任何人如何將惡意代碼注入您的Cookie?當然,逃避它並不壞。 – Bergi

    +0

    @Bergi我想用戶剛剛在瀏覽器中編輯了cookies。我不確定這會如何影響其他用戶,所以我不認爲它在事物的宏偉計劃中造成太多問題。但是,無論哪種編碼習慣導致這種XSS,都可能出現在其他地方。 – Julio

    回答

    2

    您將需要驗證來自getCookieValue的數據。如果您期待一個號碼,請確保返回的值是數字。同時確保任何轉義字符(例如,脫離您的javascript的引號)不在該字段中。對此的修復如下所示:

    function is_valid(value) { 
        // Do some check here depending on what you're expecting. 
        // I also recommend escaping any quotes (i.e. " becomes \") 
        // Ideally, you'd just whitelist what is acceptable input (A-Z0-9 or whatever, 
        // and return false from this function if something else is present in 
        // value!) 
    } 
    
    var cookie_value = getCookieValue('fieldval'); 
    
    if(is_valid(cookie_value)) { 
        document.write('<input type="hidden name="field1" value="' + cookie_value + '" />'); 
    } 
    

    長話短說,在document.write之前清理數據,或者最終得到反映的XSS。

    正如上面評論中提到的,源自用戶自己的cookies(他們修改自己的東西)的XSS並不特別令人擔憂。但是,無論哪種編碼實踐導致這種情況都可能出現在別處。我建議您查看您的來源,並確保全部用戶輸入被視爲不可信任和適當消毒。

    +0

    我會試試這個,然後回覆。感謝你的回答 – fn79

    2

    你的代碼中包含了兩個錯誤:

    1. 您插入不可信數據到輸出不正確編碼它(這將打開大門,反映XSS攻擊)
    2. 您使用document.write插入普通的HTML到DOM (這將打開大門,DOM XSS攻擊)

    重塑你應該看看OWASP備忘單輪前糾正錯誤:

    1. OWASP XSS Prevention Cheak Sheet - Rule 2
    2. OWASP DOM based XSS Prevention Cheat Sheet - Rule 2

    正如你所看到的,你的問題不僅是通過逃逸引號固定。將不受信任的數據列入白名單始終是首選方式和有效建議。有關XSS的進一步閱讀,鏈接中包含許多參考資料。

    相關問題