0

我们最近运行 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);"

我能做些什么来修复它?

谢谢

4

1 回答 1

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));

于 2014-02-22T11:32:10.757 回答