我继承了一个遗留应用程序,下面给出了一段代码。
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)”。
有人可以告诉我这个问题应该如何解决吗?任何帮助将不胜感激。
请您参考如下方法:
问题是“单词”被传递到您的方法,但在使用它们之前不会中和它们 - 单词“按原样”使用,因此可能包含造成伤害的脚本。有一个很好的描述解释了这一点以及为什么这是一个问题: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