2016-02-11 56 views
1

說我在Spring環境中,我有一個URL http://www.example.com/name=alice從URL中顯示參數而不轉義是危險的嗎?

在控制器中,我有這樣的代碼,

mav.addObject("name", request.getParameter("name")); 

而在JSP文件中,它呈現像

<div><c:out value="${name}" /></div> 

我的問題是,

  1. 如果惡意用戶附加了一個不好的字符串,例如,在URL中的短腳本,如http://www.example.com/name={some bad script}<c:out>會保護我,我的理解是否正確?
  2. 如果我不能使用<c:out>怎麼辦?說,參數是「愛麗絲&鮑勃」,<c:out>將它變成「愛麗絲%26bob」,這不是我想要的。在這種情況下我如何保護自己?
+0

使用輸入 - 如果來自URL - 在未正確轉義(或參數化)的情況下使用輸入 - 如果它曾被*使用過,則是危險的。從'getParameter'返回的值已經是URI- * unescaped *,所以它可能是「alice bob」。 – user2864740

+0

但是,上述內容與我所期望的'真正的問題'並不嚴格相關:怎樣才能安全地顯示HTML中的*文本*來自* any * source的數據 - 它包含特殊的XML/HTML字符,例如&符號或尖括號?在c:out不可用/適用的上下文中如何? – user2864740

回答

0

在發送給客戶端之前,您總是必須先轉義和清理不可信的輸入。 手工編碼很痛苦且容易出錯。但您可以使用SafeHtmlBuilder舉例。 :-)