我在一個Java Web應用程序,是多年的老工作。如何解決地方性XSS漏洞在Java Web應用
即使在不需要時,JSP中的大部分<bean:write>
都有filter="false"
,可能是因爲開發人員盲目複製現有代碼。 <bean:write>
是用於輸出JSP變量的Struts標記,並且指定filter="false"
時,它不會執行HTML轉義(因此filter="false"
類似於<c:out>
屬性escapeXml="false"
)。這意味着該應用程序容易受到XSS攻擊,因爲其中一些<bean:write filter="false">
正在輸出用戶輸入。
filter="false"
的全面刪除不是一種選擇,因爲在某些情況下,應用程序允許用戶使用TinyMCE文本區域輸入HTML,所以我們確實需要在某些情況下輸出原始HTML以保留用戶輸入的格式(儘管我們仍然應該清理用戶輸入的HTML以刪除腳本)。
有成千上萬的filter="false"
S IN的代碼,以便每個人的審計工作起來是否需要的時間太長。
我們想要做的是製作我們自己版本的bean:write
標籤,比如secure:write
,並且執行bean的全局查找/替換:在我們的JSP中使用secure:write編寫。當指定filter="false"
時,secure:write
將從輸出中去除腳本。在這種變化之後,用戶仍然能夠將格式化HTML輸出到他們不應該真正能夠的地方,但是隻要XSS漏洞得到修復,我們暫時不擔心這一點。
我們想用庫來實現secure:write
標籤中的腳本剝離,我們一直在尋找https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project和https://code.google.com/p/owasp-java-html-sanitizer/。這兩個看起來像他們能夠清理HTML,雖然AntiSamy看起來是打算用來消毒的方式HTML到應用程序,而不是在路上了,而且由於數據輸出往往比它輸入我們擔心通過它運行我們所有的secure:write
輸出可能會很慢。
我有2個主要問題:
1)將我們提出的辦法努力解決造成filter="false"
的XSS漏洞?
2)顯示內容的時候,任何人都可以推薦一個庫用於HTML禁制也就是說,它是速度不夠快,沒有顯著影響頁面渲染性能?有沒有人使用AntiSamy或owasp-java-html-sanitizer來做類似的事情?
我們已經爲owasp-java-html-sanitizer :-)留下了深刻的印象 - 開發benchamrk和make runtests工作時不需要我配置任何設置!我們使用基於eBay的政策,因爲我們希望允許大多數HTML通過。 感謝您對其他潛在漏洞的建議。 – frankoid 2013-03-27 16:11:44
@frankoid,我很高興你喜歡它。順便提一句,[html-contextual-autoescaper-java](https://github.com/mikesamuel/html-contextual-autoescaper-java)旨在進行上下文推理和消毒劑採摘。它正在[Google Apps腳本](https://developers.google.com/apps-script/html_service#scriptlets-printing)中生效,並且我有一個集成了Jasper的黑客版本,但它不是一個下拉菜單,尚未替代JSP。 – 2013-03-27 18:20:34