2011-05-30 55 views
5

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編碼?

回答

4

SafeHtmlTemplates會做到這一點(只有客戶端,因爲它依賴於一個GWT生成器)。它會使用「標籤湯」解析器來解析HTML片段,該解析器會推斷上下文並記錄警告,或者在參數無法在此上下文中使用時拋出警告(例如,它阻止在腳本上下文中使用佔位符) 。儘管如此(雖然SafeUri仍在審覈中,SafeStyles仍然受到嚴重限制),但它會在適當的時候出現(我認爲應該在GWT 2.4中)。

否則:

  • SafeHtmlUtils的會逃避所有的<>&'"所以結果是 「HTML」 和 「HTML屬性」 安全上下文
  • SafeHtmlBuilder的各種追加方法只會在電話號碼下呼叫SafeHtmlUtils
  • UriUtils提供工具清理不安全的URI(您仍然需要SafeHtmlUtils通行證或同等效果之後如果你正在構建一個HTML字符串-vs。直接將該值用於圖像源或錨點的href-)。
  • SafeStyles本身沒有提供任何特定的內容,但SafeHtmlTemplates只會允許它在CSS上下文的開始,並且如果您嘗試在CSS上下文中放置其他任何內容,將會記錄警告。預計SafeStylesBuilder將擴展爲類型安全方法,以幫助構建格式良好的 CSS。
  • I've been workingSafeUri接口上,類似於SafeStyles,但在URL上下文中。在適當的時候,SafeHtmlTemplates將僅允許或String作爲URL屬性的完整值,並將String通過UriUtils以確保其安全。

簡而言之,我認爲你的問題的答案是:是的,GWT的safehtml包適合這個;但您可能必須始終使用最新版本的GWT(至少在未來一年中)爲安全

+1

因此,基本上,SafeHTMLTemplates是我在處理除HTML之外的上下文時使用的,但是您建議不要依賴它來安全編碼GWT 2.3中的URL和樣式?最後是基於DOM的XSS需要在GWT中考慮,因爲我們確實有能力直接設置DOM元素的內部html? – 2011-05-30 20:05:06

+1

沒有魔法,你可以自己做的所有SafeHtmlTemplates;但SafeHtmlTemplates會自動執行一些檢查代碼所必須執行的檢查。現在(GWT 2。3),它不夠先進,檢查CSS(我不確定它會做什麼,計劃是給你一個工具來幫助你*構建*安全的CSS)。至於網址,它會調用'UriUtils.sanitizeUri',這樣你就可以安全,但是有一些安全的URI會被擦掉(比如你知道安全的'data:'URI),並且即使不安全,它仍會保留原樣的幾個案例(請參閱SafeUri代碼審查)。 – 2011-05-31 09:24:19

+1

最後:基於DOM的CSS絕對是GWT需要擔心的,這就是爲什麼'SafeHtml'和朋友首先被添加的原因。無論何時您可以設置元素的innerHTML,請嘗試使用「SafeHtml」工具構建它。它永遠不會替代審計您的代碼,但它應該大大有助於這樣做。 – 2011-05-31 09:27:18