[英]Escaping characters to avoid XSS in Java
我需要轉義字符以避免XSS。 我正在使用org.apache.commons.lang.StringEscapeUtils.escapeHtml(String str),它以下列方式提供幫助:
原始輸入
" onmouseover=alert() src="
轉義后的HTML變成
" onmouseover=alert() src="
但是,在某些情況下,反射的輸入會被用單引號引起來,例如:
test'];}alert();if(true){//
在這種特殊情況下,轉義HTML不會產生任何效果。 但是,org.apache.commons.lang.StringEscapeUtils也有一個名為escapeJavascript(String str)的方法,該方法會將輸入轉換為:
test\'];}alert();if(true){\/\/
這里的問題是,您是否要通過先轉義HTML然后再轉義Javascript來清理輸入? 另一種方法是用\\'手動替換單引號字符。
任何幫助將不勝感激!
正如@ gabor-lengyel提到的那樣,我應該能夠使用html編碼器轉義單個引號。
我遇到的問題是我使用的是org.apache.commons.lang.stringescapeutils.escapeHtml
,它無法用相應的HTML實體轉義單引號。 我現在正在使用org.springframework.web.util.HtmlUtils.htmlEscape
,它能夠處理雙引號和單引號。
再次感謝@ gabor-lengyel的幫助!
您不需要為XSS保護使用escapeJavascript
/ escapeEcmaScript
。 將escapeHtml
輸出添加到您的站點應該是安全的:
"<p>" + escapeHtml(userProvided) + "</p>"
如果您想要以下內容:
"<p class='" + userProvided + "'>"
確保安全性要困難得多,您可能想使用合法字符/值的白名單(例如regexps [aZ]
, (option1|option2)
)),並丟棄所有意外內容而不是轉義它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.