2017-09-19 54 views
0

經過checkmarx掃描我的代碼後,我收到以下消息。如何防止JavaScript中的客戶端DOM XSS漏洞?

方法在... \ action \ searchFun.js的第23行執行,獲取表單元素的用戶輸入。

然後,此元素的值將在代碼中流動,而不會被正確清理或驗證,並最終會顯示給位於../action/searchFun.js第28行的用戶。這可能會導致DOM XSS攻擊。

有些人可以幫助我如何清理上述情況以滿足Checkmarx? 腳本如下:

function searchAnnouncements(){ 
    $('#loadingAnnouncements').html('Loading...'); 
    var formData = $('form').serialize(); 

    jQuery.ajax({ 
    type: "post", 
    url: "bat.ajax", 
    data: formData, 
    cache: false, 
    dataType: "json", 
    cache: false, 
    success: function(json) { 
     $('div.block').unblock(); 
     $('#loadingAnnouncements').html(''); 
     if (json.resultSize > 0) 
     $('#searchResults').html(json.searchResult); 
    }); 
    }, 
} 
+1

那麼它是在抱怨html行?祝你好運...如果你從服務器返回html並顯示它,這可能是一個問題。只有這樣才能避免發送HTML並解析JSON並構建DOM。或者你可以找到一些XSS卸妝腳本,但可能會錯過任何東西。或者你可以忽略警告並享受咖啡。 – epascarello

回答

1

可以使用DOMPurify庫。 https://github.com/cure53/DOMPurify

這應該通過保持安全的HTML標記來阻止XSS注入。

function searchAnnouncements(){ 
    $('#loadingAnnouncements').html('Loading...'); 
    var formData = $('form').serialize(); 

    jQuery.ajax({ 
    type: "post", 
    url: "bat.ajax", 
    data: formData, 
    cache: false, 
    dataType: "json", 
    cache: false, 
    success: function(json) { 
     $('div.block').unblock(); 
     $('#loadingAnnouncements').html(''); 
     if (json.resultSize > 0) 
     $('#searchResults').html(DOMPurify.sanitize(json.searchResult)); 
    }); 
    }, 
} 
+0

@TimothéMalahieude$()。text方法不呈現DOM。我認爲在這種情況下,他想將響應內容呈現給DOM,而不是顯示爲純文本。 – Thusitha

+0

你說得對,我回復得太快了。我不認爲他實際上從服務器上檢索到HTML。我剛剛取消了我的downvote。 –

+0

@TimothéMalahieude好的伴侶 – Thusitha