在 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");