我有以下代码段,我正在对其进行编码以防止XSS。
<% if (answerList.size() > 2){
out.write("<td width='30%' class='label' nowrap='nowrap'><label> "+ address value +"</label></td>");
}%>
这里我要编码地址值。如果在Scriptlet标签中有任何内容是JAVA CODE那么我应该考虑使用encodeForJavascript()或者因为它只是渲染html我应该考虑使用encodeForHTMLAttribute()。这可能听起来很愚蠢,但我确实需要有人指导。我找不到足够的资源来正确理解这一点。提前致谢
更新:现在我看到了一些新内容,我想进一步更新我的问题。
<td>
<%
out.Write(request.getParameter("address");
%>
</td>
在上面的代码中,它又是一个scriptlet,但是html标签被放在了外面。我应该考虑哪一个
答案 0 :(得分:0)
encodeForJavascript
仅适用于某些JavaScript代码,但不适用于Java。
您应该根据渲染的输出进行编码,这是HTML。encodeForHTMLAttribute
将对属性进行编码。您在此处有标记而非属性之间的值,因此您可以使用encodeForHTML
。
如果您尝试使用引号来渲染值,那么您应该看到带有实体编码的输出,并在浏览器中正确呈现。