1

我继承了一个遗留应用程序,下面给出了一段代码。

private static void printKeywordCheckboxes(JspWriter out, ArrayList words, int type)
throws IOException {

   LogbookKeyword thisWord;

   Iterator iterWord = words.iterator();
   while (iterWord.hasNext()) {

      thisWord = (LogbookKeyword) iterWord.next();
      out.println("    <input type=\"checkbox\" name=\"keywordCheckbox" + 
         type + "\" value=\"" + 
         thisWord.hashCode() + "\" checked/>" + 
         thisWord.getWord() + "<br>");
   }
}

Veracode 在“out.println()”处抛出异常“网页中与脚本相关的 HTML 标记的不正确中和(基本 XSS)”。

谁能让我知道这个问题应该如何解决?任何帮助将不胜感激。

4

3 回答 3

1

问题是“单词”被传递给您的方法,但在它们被使用之前没有中和它们 - 单词被“按原样”使用,因此可能包含造成伤害的脚本。有一个很好的描述解释了这一点以及为什么它是一个问题:http ://www.veracode.com/images/pdf/top5mostprevalent.pdf

当您生成此 HTML 时,您将需要中和用户输入 - 在将其转换为 HTML 之前确保它是无害的。我的 Java 有点生疏,但 Google 给了我们一些建议:

阅读此备忘单上的提示:https ://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

于 2014-04-02T09:52:40.780 回答
0

另请注意,Veracode 在 Java 中识别的某些清理功能已经过 Veracode 的安全团队的审查和确认。您可以在 Veracode 帮助中心找到此列表。

于 2014-04-02T19:56:40.757 回答
0

网页中与脚本相关的 HTML 标签的不正确中和(基本 XSS)(CWE ID 80)

描述 摘要

该软件从上游组件接收输入,但它不会清理或错误清理特殊字符,例如“<”、“>”和“&”,这些字符在发送到下游组件时可能被解释为 Web 脚本元素处理网页。

扩展描述

这可以允许将此类字符视为控制字符,这些字符在用户会话的上下文中在客户端执行。尽管这可以归类为注入问题,但更相关的问题是在将这些特殊字符显示给用户之前未能将它们转换为相应的上下文适当的实体。

public static String encodeHTML(String s)
  {
    StringBuffer out = new StringBuffer();
     for(int i=0; i<s.length(); i++)
      {
       char c = s.charAt(i);
       if(c > 127 || c=='"' || c=='<' || c=='>')  {
         out.append("&#"+(int)c+";");
       }
       else  {
        out.append(c);
    }
}
  return out.toString();
 }

是否有一个 JDK 类来进行 HTML 编码(但不是 URL 编码)?

于 2017-02-06T19:40:18.100 回答