Veracode - 网页中与脚本相关的 HTML 标记的不正确中和(基本 XSS)
Posted
技术标签:
【中文标题】Veracode - 网页中与脚本相关的 HTML 标记的不正确中和(基本 XSS)【英文标题】:Veracode - Improper Neutralization of Script-Related HTML tags in a Web Page (Basic XSS) 【发布时间】:2014-05-13 04:11:42 【问题描述】:我继承了一个遗留应用程序,下面给出了一个 sn-p 代码。
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)”。
谁能告诉我这个问题应该如何解决?任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:网页中与脚本相关的 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();
Is there a JDK class to do HTML encoding (but not URL encoding)?
【讨论】:
【参考方案2】:另请注意,Veracode 可以识别 Java 中的某些清理功能,这些功能已经过 Veracode 的安全团队的审查和确认。您可以在 Veracode 帮助中心找到此列表。
【讨论】:
谢谢蒂姆。请告诉我清洁功能或veracode帮助中心的链接。我无法在他们的网站上找到它【参考方案3】:问题是“单词”被传递给您的方法,但在它们被使用之前没有中和它们 - 单词被“按原样”使用,因此可能包含造成伤害的脚本。有一个很好的描述解释了这个以及为什么它是一个问题:http://www.veracode.com/images/pdf/top5mostprevalent.pdf
当您生成此 HTML 时,您将需要中和用户输入 - 在将其转换为 HTML 之前确保它是无害的。我的 Java 有点生疏,但 Google 给了我们一些建议:
Recommended method for escaping HTML in Java Java escape HTML阅读此备忘单上的提示:https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
【讨论】:
以上是关于Veracode - 网页中与脚本相关的 HTML 标记的不正确中和(基本 XSS)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用错误消息修复网页中与脚本相关的 HTML 标签的不正确中和(基本 XSS)?
如何修复 Veracode - 跨站点脚本 - CWE ID 80 - 基本 XSS - 在 .each 函数中使用 $(item)