如何使用错误消息修复网页中与脚本相关的 HTML 标签的不正确中和(基本 XSS)?

Posted

技术标签:

【中文标题】如何使用错误消息修复网页中与脚本相关的 HTML 标签的不正确中和(基本 XSS)?【英文标题】:How to fix Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS) with error message? 【发布时间】: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);
            
        

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

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于如何使用错误消息修复网页中与脚本相关的 HTML 标签的不正确中和(基本 XSS)?的主要内容,如果未能解决你的问题,请参考以下文章

Veracode - 网页中与脚本相关的 HTML 标记的不正确中和(基本 XSS)

如何修复 Veracode - 跨站点脚本 - CWE ID 80 - 基本 XSS - 在 .each 函数中使用 $(item)

避免 Veracode CWE-80:jquery htm() 方法中与脚本相关的 HTML 的不当中和

PHP配置文件中与错误相关选项

如何解决 WebAssembly 应用程序中与 HttpClient 相关的错误

使用 WPF WebBrowser 控件时如何抑制脚本错误?