5

我们在登录页面中使用 Web 控制适配器。最近我们在我们的 Web 应用程序上运行 VeraCode。在下面的函数中,我们得到了 CWE80,网页中与脚本相关的 HTML 标记的不当中和(基本 XSS),上线

rev.ErrorMessage = msg;

以下是 WebControlAdapterExtender 类中的函数。

static public void WriteRegularExpressionValidator(HtmlTextWriter writer, RegularExpressionValidator rev, string className, string controlToValidate, string msg, string expression)
        {
            if (rev != null)
            {
                rev.CssClass = className;
                rev.ControlToValidate = controlToValidate;
                rev.ErrorMessage = msg;
                rev.ValidationExpression = expression;
                rev.RenderControl(writer);
            }
        }

有没有人有任何建议如何解决这个问题?

4

5 回答 5

5

问题是 'msg' 被传递给你的函数,但在它被使用之前没有中和它 - 字符串被使用'a​​s-is',因此可能包含造成伤害的脚本。有一个很好的描述解释了这一点以及为什么它是一个问题:http ://www.veracode.com/images/pdf/top5mostprevalent.pdf

我自己没有使用过这个,但我认为 ErrorMessage 在发生错误时会被渲染和显示。因为如果 'msg' 是一个顽皮的代码片段,这将在最后一页呈现,您将自己和您的用户暴露于安全漏洞。

阅读此备忘单上的提示:https ://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

您应该能够使用 HtmlEncode 使这个安全 HttpUtility.HtmlEncode(unencoded);

rev.ErrorMessage = System.web.HttpUtility.HtmlEncode(msg);
于 2014-02-20T16:51:52.340 回答
0

您还可以使用 Apache Commons Lang3 库 StringEscapeUtils。它有多种编码字符串的方法。例如 escapeXml(string)、escapeHtml(string) 等。

rev.ErrorMessage = StringEscapeUtils.escapeHtml(msg);
于 2015-10-08T21:00:24.643 回答
0

VeraCode 列出了Supported Cleansing Functions,包括每个函数处理的 CWE ID。

于 2018-08-28T14:33:12.450 回答
-1

函数调用包含 HTTP 响应拆分缺陷。将未经过滤的用户提供的输入写入 HTTP 标头允许攻击者操纵浏览器呈现的 HTTP 响应,从而导致缓存中毒和跨站点脚本攻击。

问题代码

strMessage=CLASSCONSTANTNAME+className+MESSAGENAME+消息;LOGGER.info(strMessage);

固定代码

strMessage=CLASSCONSTANTNAME+className+MESSAGENAME+消息;LOGGER.info(ESAPI.encoder().encodeForHTML(strMessage));

更多详情

于 2015-11-04T10:34:19.703 回答
-1

您可以使用 ESAPI 库来解决此问题。

rev.ErrorMessage = ESAPI.encoder().encodeForHTML(msg);
于 2017-04-24T06:57:14.153 回答