2017-08-24 44 views
0

我正在修復java中的跨站腳本問題。由於我是OWASP新手,有人可以幫我弄清楚如何在以下情況下使用OWASP來清理輸入。修復java中使用OWASP的跨站腳本漏洞

  1. Enumeration<String> EnumHeader = request.getHeaderNames();

  2. Map<String, String[]> pMap = request.getParameterMap();

  3. Object value = request.getHeader(key);

  4. String[] refs = (req.getParameterValues(REFS_NAME));

+0

我會通過以下規則#0和規則#1開始:https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet該庫的 – fgb

回答

1

儘管數據驗證對防止XSS非常有幫助,但它並不一定涵蓋持久XSS的所有基礎。唯一的100%有效保護是OWASP Java編碼器項目或OWASP ESAPI的編碼器提供的正確的上下文輸出編碼。其中一個原因是對於持久性XSS,受污染的數據可能來自可能由另一個應用程序輸入或更改的數據庫,該應用程序對這些相同的數據庫表進行了插入/更新訪問,但未進行適當的數據驗證。 (也就是說,受污染的數據可能以不同於通過應用程序的其他方式進入您的系統。)所以唯一的萬無一失的解決方案是做適當的上下文輸出編碼。您已經指出的OWASP XSS預防備忘單是開始解釋所有這些問題的好地方。

0

你可以使用一個OS庫消毒那些字符串/對象。

實例庫:https://finn-no.github.io/xss-html-filter/

然後頁眉和參數的這些集合,你可以遍歷它們使用Java 8流,並將它們映射到新的過濾集合(即使用消毒劑庫)。

+0

的方法,使用正則表達式來替換字符串html,會產生易受攻擊的格式錯誤的html。 owasp html消毒器更好。例如,這會執行一個警告:'123123' – fgb

+0

事實上,這裏引用的HTML過濾器具有特定用例,您的應用程序必須接受來自用戶的HTML內容 - 默認情況下,它可能使您更容易受到攻擊,不要做輸出轉義。正如@fgb所指出的那樣,正確的方法是使用HTML解析器,而不是正則表達式。 – avgvstvs