我应该在哪里转义HTML字符串,JSP页面或Servlets?

Bas*_*usa 17 java jsp servlets

我很感激为我提供了一套明确的指导方针或处理逃避字符串的裁决.我用来转义字符串的是apache commons-lang-xxjar库.特别是StringEscapeUtils.escapeHtml(String toEscape)方法.

我需要知道:

(1)在JSP页面或Servlet中转义字符串更好?

(2)你从JSTL推荐StringEscapeUtils.escapeHtml(..)或<c:out>是什么?

(3)处理多行字符串,哪个更好,直接在字符串中使用<br>,或者\n和nl2br()方法:

String strError = "Invalid username.\nPlease try again.";

要么

String strError = "Invalid username.<br>Please try again.";

(4)如何转义接收外卡的字符串,例如:

String strError = "Invalid user [%s].<br>Please specify another user."

(5)由于javascript转义字符不同.我应该使用什么来转义要在JSP页面的javascript部分内呈现的Java字符串(例如var name = "<%=javaStringHoldingName%>").

Bal*_*usC 16

你只需要在它可能受到伤害的地方完全逃脱它.在这种特殊情况下,它在视图中.当用户控制的HTML在视图中的所有HTML中进行内联时,可能会受到损害.这是XSS的来源.

在一个设计良好的JSP页面(读取: scriptlets)中,JSTL为您提供了转义HTML/XML 的<c:out>标记和fn:escapeXml()函数.

<c:out value="${param.foo}" />
<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />
Run Code Online (Sandbox Code Playgroud)