3

我们正在使用 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 是误报。

大家怎么看?

4

2 回答 2

1

由您的代码创建的任何消息都是安全的,但 Fortify 会标记这一点,因为那里正在记录用户输入。如果您允许用户数据进入日志,您需要做的不仅仅是限制输入的大小。至少要确保数据中没有回车或换行,这样它们就不会欺骗日志消息。如果可以在浏览器中查看日志,您还需要对消息进行 HTML 编码。检查这个文件:

https://owasp-esapi-dotnet.googlecode.com/svn/trunk/Esapi/Logger.cs

.NET 的 OWASP ESAPI 已经过时了,但是这个记录器可以向您展示在将数据放入日志之前查找上述用例的好方法。

于 2015-03-18T15:55:03.903 回答
1

最好过滤记录到文件的任何用户输入。提供可接受字符的while-list或不可接受字符的黑名单

例子:

string safeUserInput = System.Text.RegularExpressions.Regex.Replace(txtUserInput.Text, “[^A-Za-z0-9 $]”, “”);

如果没有其他限制允许的任何用户输入"/n",那么您的日志文件不会占用空间并导致服务器崩溃。

于 2017-01-13T19:48:27.997 回答