2017-01-02 376 views
0

我正在使用JavaScript編碼的一些頁面應用程序當前使用lodash。我想,以防止跨站腳本(XSS)使用標準函數庫:JavaScript庫或Esapi阻止XSS - 轉義和編碼不受信任的數據

1)擺脫依賴於它的目的地CSS,HTML,HTMLAttribute的JavaScript,JSON等編碼輸出的所有不可信的內容

2)

我已經看到了很多堆棧溢出的答案,但是他們沒有在標準庫中提供完整的規範化/編碼解決方案,我可以編寫靜態測試以確保開發人員使用該庫。

是否有esapi或類似的「光」庫,我只能用於JavaScript?

我已經看到了OWASP ESAPI和jQuery的編碼器插件 https://github.com/chrisisbeef/jquery-encoder 和Salesforce的編碼器https://github.com/salesforce/secure-filters

在這一刻,我只輸入進行規範化和編碼輸出感興趣。 我也在尋找一些當前的,維護良好,理想情況下不依賴於其他圖書館。

任何人都可以提出最好的方法來使用?

回答

0

是否有任何模板框架在使用? 理想情況下,您應該使用像React這樣的框架,它默認處理編碼。那麼你所要做的就是確保DagerouslySetInnerHTML不被使用(或安全地使用)。

添加不受信任的CSS被認爲是不安全的,除非驗證了白名單。 將不可信數據添加到標記可以通過將數據分配給element.textContent或使用jQuery的$ .text()來安全地完成。 將不可信數據添加到不屬於事件處理程序的HTML屬性可以使用element.setAttribute或$ .attr()來完成。 對於內部腳本標記(html上下文中的javascript上下文)或javascript事件處理程序屬性(html上下文內部的javascript上下文)等雙上下文,您必須確保對兩者都進行編碼。

對於HTML內容,您可以選擇使用DOMPurify移除任何活動內容,但如果你需要允許不可信的HTML片段更有效。

+0

感謝您的回答。 框架?是。我們處於我們擁有來自傳統和不同第三方的數字的位置。 並非所有項目都使用jQuery。 我正在尋找一個自包含的圖書館的原因之一。 感謝DOMPurify - 我會進一步調查 您對我如何使用「靜態分析」來嘗試確保開發人員做正確的事情有任何想法嗎? – user2684122

+1

對於JavaScript,只需以'\ xNN'格式對所有非字母數字進行編碼。這樣你就不必加倍編碼,因爲你不會得到任何需要HTML編碼的東西。如果您需要在此處插入動態內容,請注意任何URL參數,因爲這些參數可能以'javascript:'URLs結尾,白名單爲'http://'和'https://'。 – SilverlightFox

0

我已經看到了一些堆棧溢出的答案,但他們不提供 在一個標準庫 一個完整的規範化/編碼解決方案,我可以寫靜態測試,以確保開發人員正在使用 庫。

原因在於您執行這些操作的順序不僅僅針對每個應用程序,而是針對每個應用程序輸出的每個變量。任何你寫的測試套件將是具體到每一個應用程序,您將不能寫「一一刀切」的測試,除非組織中的所有應用程序使用完全相同的技術,方法,和過程。根據我的經驗,沒有一家公司達到過這種統一水平,除非它是一個單一的開發者。

您對我如何使用「靜態分析」進行嘗試以及確保開發人員做正確的事情有任何想法嗎?

Veracode,HP Fortify是兩個COTS示例。我知道他們可以檢查幾種不同類型的代碼庫。但是這些要求將它們注入開發週期以使它們有效......理想地作爲構建管道的一部分。