我们正在使用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是一个误报。
你们都在想什么?
答案 0 :(得分:1)
您的代码创建的任何消息都是安全的,但Fortify正在标记这一点,因为用户输入正在那里记录。如果允许用户数据进入日志,则需要做的不仅仅是限制输入的大小。至少要确保数据中没有回车符或换行符,这样它们就不会欺骗日志消息。如果可以在浏览器中查看日志,则还需要对邮件进行HTML编码。检查此文件:
https://owasp-esapi-dotnet.googlecode.com/svn/trunk/Esapi/Logger.cs
OWASP ESAPI for .NET已经过时了,但是这个记录器可以向您展示在将数据放入日志之前查找上述用例的好方法。
答案 1 :(得分:0)
最好过滤记录到文件的任何用户输入。提供可接受字符的 while-list 或不可接受字符的黑名单。
示例:强>
string safeUserInput = System.Text.RegularExpressions.Regex.Replace(txtUserInput.Text, “[^A-Za-z0-9 $]”, “”);
如果没有其他限制允许"/n"
的任何用户输入,那么您的日志文件不会占用空间并导致服务器崩溃。