OWASP的優秀人士強調,您必須對將不可信數據放入(body,attribute,JavaScript,CSS或URL)的HTML文檔部分使用轉義語法。請參閱OWASP - XSS。他們的API(由ESAPI團隊開發),隨後爲迎合每個背景下,這個具有編碼器:GWT SafeHTML,XSS和最佳實踐
ESAPI.encoder().encodeForHTML("input"); ESAPI.encoder().encodeForHTMLAttribute("input"); ESAPI.encoder().encodeForJavaScript("input"); ESAPI.encoder().encodeForCSS("input"); ESAPI.encoder().encodeForURL("input");
隨後這使得開發人員,以應付DOM-based XSS。
所以我的問題是GWT的safehtml包如何迎合這個問題,還是僅僅關注HTML編碼?
因此,基本上,SafeHTMLTemplates是我在處理除HTML之外的上下文時使用的,但是您建議不要依賴它來安全編碼GWT 2.3中的URL和樣式?最後是基於DOM的XSS需要在GWT中考慮,因爲我們確實有能力直接設置DOM元素的內部html? – 2011-05-30 20:05:06
沒有魔法,你可以自己做的所有SafeHtmlTemplates;但SafeHtmlTemplates會自動執行一些檢查代碼所必須執行的檢查。現在(GWT 2。3),它不夠先進,檢查CSS(我不確定它會做什麼,計劃是給你一個工具來幫助你*構建*安全的CSS)。至於網址,它會調用'UriUtils.sanitizeUri',這樣你就可以安全,但是有一些安全的URI會被擦掉(比如你知道安全的'data:'URI),並且即使不安全,它仍會保留原樣的幾個案例(請參閱SafeUri代碼審查)。 – 2011-05-31 09:24:19
最後:基於DOM的CSS絕對是GWT需要擔心的,這就是爲什麼'SafeHtml'和朋友首先被添加的原因。無論何時您可以設置元素的innerHTML,請嘗試使用「SafeHtml」工具構建它。它永遠不會替代審計您的代碼,但它應該大大有助於這樣做。 – 2011-05-31 09:27:18