我们最近运行了VeraCode,它失败了以下方法:
static public void WriteTargetAttribute(HtmlTextWriter writer, string targetValue)
{
if ((writer != null) && (!String.IsNullOrEmpty(targetValue)))
{
if (targetValue.Equals("_blank", StringComparison.OrdinalIgnoreCase))
{
string js = "window.open(this.href, '_blank', ''); return false;";
writer.WriteAttribute("onclick", js);
writer.WriteAttribute("onkeypress", js);
}
else
{
writer.WriteAttribute("target", targetValue);
}
}
}
VeraCode在最后一行失败:“writer.WriteAttribute(”target“,targetValue);”
我该怎么做才能解决它?
感谢的
答案 0 :(得分:2)
问题在于'targetValue'被传递给你的方法,但是在它被使用之前没有中和它 - 字符串按原样使用'因此可能包含造成伤害的脚本。有一个很好的描述解释这个以及为什么它是一个问题:http://www.veracode.com/images/pdf/top5mostprevalent.pdf
因为'targetValue'将呈现给网页,所以有人可以输入将在最终页面上呈现的脚本。如果'targetValue'是一个顽皮的代码片段,那么您就会将自己和您的用户暴露给安全漏洞。
阅读有关此备忘单的提示:https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
你应该能够使用HtmlEncode来实现这个安全的HttpUtility.HtmlEncode(targetValue);
writer.WriteAttribute("target", System.web.HttpUtility.HtmlEncode(targetValue));