我们正在使用 Fortify 扫描我们的 .NET 应用程序,需要提供一些信息来说明为什么 Log Forging 问题不适用于我们。在我们的代码中,我们有以下模式,当然它不完全是这样,我已经捕获了我们正在做的事情的本质:
public static void Write(object message,
ICollection<string> categories, int priority,
int eventId, TraceEventType severity, string title,
IDictionary<string, object> properties)
{
LogEntry log = new LogEntry();
string MessageToAdd = message.ToString();
if (message.ToString().Length > MaxLength)
log.Message = message.ToString().Substring(0, MaxLength);
else
log.Message = message.ToString();
log.Categories = categories;
log.Priority = priority;
log.EventId = eventId;
log.Severity = severity;
log.Title = title;
log.ExtendedProperties = properties;
Logwriter Logger;
Logger.Write(log);
}
所以基本上,我们控制如何创建日志条目对象。我们将消息或用户输入限制为 100 个字符。因此我们认为 Fortify 提出的 Log Forging 是误报。
大家怎么看?
最佳答案
您的代码创建的任何消息都是安全的,但 Fortify 会标记此消息,因为用户输入会被记录在那里。如果您允许用户数据进入日志,您需要做的不仅仅是限制输入的大小。至少要确保数据中没有回车符或换行符,这样它们就无法伪造日志消息。如果可以在浏览器中查看日志,您还需要对消息进行 HTML 编码。检查此文件:
https://owasp-esapi-dotnet.googlecode.com/svn/trunk/Esapi/Logger.cs
用于 .NET 的 OWASP ESAPI 已经过时了,但是这个记录器可以向您展示一种在将数据放入日志之前查找上述用例的好方法。
关于logging - 强化日志锻造问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29053104/