我继承了遗留应用程序,下面给出了一段代码。
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正在抛出一个异常&#34;网页(基本XSS)中与脚本相关的HTML标记的不正当中和&#34;在&#39; out.println()&#39;。
有人能让我知道应该如何解决这个问题吗?任何帮助将不胜感激。
答案 0 :(得分: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
答案 1 :(得分:0)
另请注意,Veracode在Java中认可的某些清洁功能已经过Veracode安全团队的审核和确认。您可以在Veracode帮助中心找到此列表。
答案 2 :(得分:0)
网页中与脚本相关的HTML标记的中和不当(基本XSS)(CWE ID 80)
说明摘要
软件接收来自上游组件的输入,但它不会清理或错误地清理特殊字符,例如“&lt;”,“&gt;”和“&amp;”当它们被发送到处理网页的下游组件时,它可以被解释为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();
}
Is there a JDK class to do HTML encoding (but not URL encoding)?