在 Java 中删除跨站脚本
Removing Cross Site scripting in Java
我有一些旧项目要维护。当使用某些工具扫描代码质量时,发现代码有很多我需要解决的跨站点脚本问题。下面给出了其中一个问题。
public class Tester1 {
public void doRecurrssion(JspWriter out, MyDTO dto){
out.print("<table");
out.print("<tr>");
out.print("<td width='30><font face='Arial, Helvetica'>"+dto.getFirstName()+"</font><td>\n");
out.print("<td width='30><font face='Arial, Helvetica'>"+dto.getLastName()+"</font><td>\n");
out.print("</tr>");
out.print("</table>");
}
}
上面代码中的第 3 条和第 4 条 "out.print" 语句出现跨站点脚本问题。如何解决?
我的猜测是该工具正在抗议,因为您正在获取原始值(例如 getFirstName()
的 return 值)并将其逐字包含在 HTML 页面中。
如果您通过 HTML 对值进行编码来保护自己免受 XSS 攻击,例如使用 OWASP Java Encoder 库:
,那么警告很可能会消失
out.print("<td width='30><font face='Arial, Helvetica'>"
+ Encode.forHtml(dto.getFirstName()) + "</font><td>\n");
out.print("<td width='30><font face='Arial, Helvetica'>"
+ Encode.forHtml(dto.getLastName()) + "</font><td>\n");
我有一些旧项目要维护。当使用某些工具扫描代码质量时,发现代码有很多我需要解决的跨站点脚本问题。下面给出了其中一个问题。
public class Tester1 {
public void doRecurrssion(JspWriter out, MyDTO dto){
out.print("<table");
out.print("<tr>");
out.print("<td width='30><font face='Arial, Helvetica'>"+dto.getFirstName()+"</font><td>\n");
out.print("<td width='30><font face='Arial, Helvetica'>"+dto.getLastName()+"</font><td>\n");
out.print("</tr>");
out.print("</table>");
}
}
上面代码中的第 3 条和第 4 条 "out.print" 语句出现跨站点脚本问题。如何解决?
我的猜测是该工具正在抗议,因为您正在获取原始值(例如 getFirstName()
的 return 值)并将其逐字包含在 HTML 页面中。
如果您通过 HTML 对值进行编码来保护自己免受 XSS 攻击,例如使用 OWASP Java Encoder 库:
,那么警告很可能会消失out.print("<td width='30><font face='Arial, Helvetica'>"
+ Encode.forHtml(dto.getFirstName()) + "</font><td>\n");
out.print("<td width='30><font face='Arial, Helvetica'>"
+ Encode.forHtml(dto.getLastName()) + "</font><td>\n");