2015-10-14 40 views
0

我的應用程序存在跨站點腳本(XSS)漏洞問題。 我有多個表單,用戶可以提交將存儲在數據庫中的數據,並稍後顯示在jsp頁面中。 我發現這個應用程序沒有得到充分的保護,用戶可以提交會引發XSS攻擊的惡意代碼。XSS:從服務器端進行輸入驗證

我需要在提交表單後驗證來自服務器端的用戶輸入。 因爲在客戶端數據顯示使用表格庫,這將呈現一個HTML內容(我無法控制這個庫)。 我在這個鏈接中找到了一個不錯的庫(https://appsec-labs.com/portal/xss-java-secure-coding/),但它只涉及客戶端。

如何才能驗證這些輸入數據?無論是html還是javscript代碼還是其他。

感謝

回答

1

基本上你需要替換HTML特殊字符,如<與他們的HTML實體,如&lt;

在JSP中,您可以使用JSTL標記或fn:escapeXml()來防止此問題。還有另外一個答案,covers that here。在PHP中,您可以嘗試使用htmlspecialchars函數。請注意0​​和CSRF attacksOWASP Top Ten概述了一些常見的漏洞。

+0

那麼,有沒有一種庫的逃避和驗證有關,如果它是一個HTML代碼,JavaScript的用戶輸入。(服務器端) ? 在jsp中,我無法使用JSTL標記或fn:escapeXml(),因爲我有一個可能包含惡意代碼的對象列表,我將其提供給表庫以顯示此列表的內容。 – kkung

+0

你只需要過濾HTML標籤,Javascript不能運行,除非你用'

0

我會推薦OWASP java編碼器(或ESAPI)項目。 https://www.owasp.org/index.php/OWASP_Java_Encoder_Project(和在GitHub上:https://github.com/OWASP/owasp-java-encoder/)。 Doco可悲的是有點稀疏。

XSS的問題在於它與上下文相關。您需要根據顯示用戶輸出的位置(例如,您在javascript標籤之間,uri中或html標籤之間放置的數據的不同編碼)進行不同的編碼。 OWASP Java編碼器設置您可以編碼/解碼的不同上下文。如果數據是通過一個JSP標記只是輸出的話,我會用

Encode.forHtml("input here"); 

您也可編碼的JavaScript:

Encode.forJavaScript("input here"); 

您也可以下載它的OWASP網站,或通過行家(看在github鏈接上)。

該庫還允許您通過JSP頁面中的JSP標記進行編碼,但是您必須仔細研究一下才能找到相應的doco。我一直用Java來完成它。

這個計算器的問題包括如何配置正確的庫鏈接:Configure ESAPI Security Encoding Library to prevent XSS Cross-site scripting issue

1

來解決,這將是解決這一問題庫(你無法控制),或更好的東西來取代它的正確途徑。缺陷在圖書館中,而不是在你的代碼中。存在XSS漏洞是因爲呈現代碼將數據插入到不安全的位置和/或不正確地轉義其輸出。

這就是說,它可能有可能保護您的應用程序而無需修復/更換庫。或者它可能不會。它很大程度上取決於庫插入用戶提供的數據的位置。

如果您可以將輸入限制爲一個字母數字字符串或更好的白色授權值列表,那麼您很可能是安全的。這意味着沒有空格,沒有簡單的引號或雙引號,沒有低於或大於符號,沒有逗號,沒有冒號,沒有分號......如果你不能和你無法控制渲染代碼如果是這樣,那麼所有投注都關閉。

也許,你會通過閱讀這篇更好地理解這個問題的: https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet