【问题标题】:How to fix Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS) with error message?如何使用错误消息修复网页中与脚本相关的 HTML 标签的不正确中和(基本 XSS)?
【发布时间】:2014-03-21 16:10:04
【问题描述】:

我们在登录页面中使用网络控制适配器。最近我们在我们的 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);
            }
        }

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

【问题讨论】:

    标签: veracode


    【解决方案1】:

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

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

    阅读此备忘单上的提示: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);
    

    【讨论】:

      【解决方案2】:

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

      rev.ErrorMessage = StringEscapeUtils.escapeHtml(msg);
      

      【讨论】:

        【解决方案3】:

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

        问题代码

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

        固定代码

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

        更多细节

        【讨论】:

          【解决方案4】:

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

          rev.ErrorMessage = ESAPI.encoder().encodeForHTML(msg);
          

          【讨论】:

            【解决方案5】:

            VeraCode 列出了Supported Cleansing Functions,包括每个函数寻址的那些 CWE ID。

            【讨论】:

              猜你喜欢
              • 2020-03-24
              • 1970-01-01
              • 1970-01-01
              • 2014-09-30
              • 2014-05-13
              • 2017-12-17
              • 2014-10-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多