2016-07-29 81 views
-1

我的應用程序是一個Spring MVC應用程序,不使用註釋(儘管它使用spring 3.1.1,它的相當老的應用程序)。HTML請求參數的編碼

我有一個JSP頁面,可以通過捲曲工具或直接從Web瀏覽器URL調用。該URL接受名爲位置

http://localhost:8080/testdomain/registeruser.do?mylocation=fr 

請求參數上調用上面的網址,我叫SimpleFormController的實現,讀取請求參數「mylocation」

如何HTML編碼請求參數「mylocation」 。在從我的控制器的request [request.getParameter(「mylocation」)]中讀取參數之前,如果我調用HtmlUtils.htmlEscape(request.getParameter(「mylocation」))就足夠了

請注意,支持mylocation的輸入參數,如前所述,我可以從命令行工具或瀏覽器URL調用它。

+0

你爲什麼要編碼任何東西?你是否得到了正確的mylocation參數值?如果這只是字母數字值,通常不需要轉義/忽略任何內容。 – Damian

+0

可能存在XSS的威脅,可以通過惡意的腳本傳遞腳本。我被理解爲HTML編碼將腳本特殊字符轉換爲其編碼形式。 – megan

+0

你用這個參數做什麼?如果你在一個js變量裏面輸出數據,HTML轉義是不夠的。但是,如果您只有一個不可信的參數,您可以通過更簡單的方式進行驗證。例如,在生成輸出之前檢查myLocation的值是否存在於枚舉類型中:MyAllowedLocations.valueOf(myLocation); –

回答

0

有兩種不同的事情:

1)URL編碼/解碼 - 它是隻允許傳遞GET參數到服務器。編碼是需要的,因爲服務器需要轉義一些特殊字符「?」 ,查詢字符串中的「&」。 它通常由Tomcat等Web服務器處理。

2)爲了防止XSS,您可以使用Jsoup。只有在網頁上顯示參數值時才需要。

一些框架,如JSF可以自動阻止XSS。當它顯示在網頁上時,它們可以轉義HTML。

+0

URL編碼是否與HTML編碼相同?其次,我不同意只有在參數值將顯示在網頁上時才需要XSS。可能會出現一些情況,例如使用可能與請求參數綁定並導致XSS攻擊的iframe或innerHTML。感謝參考JSoup,我會進一步研究它。 – megan

+0

不,爲了防止XSS只需要HTML編碼。腳本不會在瀏覽器地址欄中執行,因此您無需編碼/解碼URL以防止XSS。 – Damian

+0

爲什麼我不能通過腳本標記(java腳本標記)作爲瀏覽器url的請求參數或者說一個curl命令?如果這個腳本沒有編碼,並且能夠在代碼內部自行執行,該怎麼辦?它不必在頁面上呈現來執行。另請參閱此鏈接,它有一些有趣的示例,https://developer.salesforce.com/page/Secure_Coding_Cross_Site_Scripting#Sample_vulnerability – megan