3

我在 veracode 工具中运行了我的安全合规应用程序。每当该工具发现任何日志记录时,它都会被检测为代码中
的缺陷并且该缺陷在下面引用

日志输出中和不当

描述

函数调用可能导致日志伪造攻击。将未经处理的用户提供的数据写入日志文件允许攻击者伪造日志条目或将恶意内容注入日志文件。损坏的日志文件可用于掩盖攻击者的踪迹或作为攻击日志查看或处理实用程序的传递机制。例如,如果 Web 管理员使用基于浏览器的实用程序来查看日志,则可能会发生跨站点脚本攻击。**

在我的日志中,我确实打印了来自其他界面的 xml,没有与应用程序关联的 GUI,所以我如何才能消除这个缺陷。

如果这不是提出这个问题的正确论坛,请告诉我。谢谢

4

4 回答 4

3

因此,将不受信任的数据转储到日志文件中存在两个主要问题。

首先,记录拆分(类似于 HTTP 标头拆分)。不受信任的输入会插入一个换行符(或类似的,取决于日志文件的格式),然后是完全伪造的条目。

其次,如果您使用 Web 浏览器查看日志,其中包含刚刚转储的日志文本,那么您很容易受到 XSS 攻击。例如,这已被用于调查脚本小子正在使用哪些浏览器(Opera 非常流行)。

因此,将日志视为容易受到注入攻击的其他格式(HTML、XML、SQL、HTTP 标头等)。您需要确保添加可能字符的白名单。您可以编写方法来执行此操作并在每次日志调用之前清理输入。更好的是编写一个记录器,它为任何输入输出安全文本(即使它有特殊字符、控制字符、非法代理对等)。

于 2011-07-28T00:02:30.230 回答
1

问题似乎是未经处理的用户提供的数据。您应该清理传入的数据,以通过替换重要字符、& -> 等来防止 SQL 注入或脚本攻击等事情&

您还应该清楚地表明日志条目包含外部数据,并且可能是损坏或误导的数据。也许像这样简单

String logText = "User " + userID + "supplied: >>" + userData + "<<";

这样就很清楚什么是你的,什么是来自外部用户的。

于 2011-07-26T13:34:51.793 回答
1

这都是很好的指导。在 Veracode 平台的 Triage Flaws 视图中,还有来自 OWASP 和其他来源的缺陷特定信息的直接链接。

于 2011-07-29T10:16:24.710 回答
0

我们应该验证来自用户的数据,因为用户/攻击者输入的数据可能包含垃圾字符。

解决方案:只需将用户输入的数据传递给下面的库。HtmlUtils.htmlEscape(输入)

于 2019-12-17T13:22:22.497 回答