2013-05-06 27 views
4

我有一個允許用戶放置圖像鏈接的文本框(例如:http://abc.test.gif)&另一個允許用戶放置替代文本(例如:「This is test.gif」)的文本框,&提交按鈕。對於SafeHtml,我們是否需要清理<img src=link>標記中的「鏈接」,GWT?

當用戶點擊提交按鈕時,程序會生成<img src="http://abc.test.gif" alt="This is test.gif">該字符串&將其存儲到數據庫中供以後使用。

我的問題是:我是否需要消毒與ImageLink "http://abc.test.gif" &在ALT標籤中的文字"This is test.gif"

例如,做我需要使用UriUtils.isSafeUri("http://abc.test.gif"); & SafeHtmlUtils.fromString("This is test.gif"

回答

3

你是故意允許用戶輸入任何他想要的東西都會進入src和標記的alt屬性。這確實對任何一種XSS攻擊都是開放的。看看here的一些例子,它們在最近的瀏覽器中仍然有效。

此外,您存儲在您的數據庫,供以後使用(猜測)的字符串,所以攻擊可以在稍後的時間發生,當你將使用這些字符串創建DOM中的節點,更是不可預測的結果。

一種解決方案可能是隻存儲URL,並在數據庫中的替代串(用正確的輸入驗證,如果有的話),併產生安全img片段權當你需要它,有一個簡單的模板一樣以下(或以編程方式使用SafeHtmlBuilder)。

template.img(
    UriUtils.fromString(yourValidatedDbUrl), 
    SafeHtmlUtils.fromString(yourValidatedAlternativeText)); 

這樣你:

public interface Template extends SafeHtmlTemplates { 
    @Template("<img src=\"{0}\" alt=\"{1}\"/>") 
    SafeHtml img(SafeUri uri, SafeHtml alternativeText); 
} 

要等中使用

  • 驗證用戶的輸入;
  • 只存儲驗證值(原樣);
  • 只有在真正需要時才以安全的方式生成img片段。
+0

謝謝安德烈,很少有人能回答這個問題。 – Tum 2013-05-07 00:43:21