如何修复网页中与脚本相关的HTML标签的不正当中和?

时间:2014-02-21 22:04:56

标签: c# html veracode

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

我该怎么做才能解决它?

感谢的

1 个答案:

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