1

我们正在运行在 IIS 7.5 上运行的 Silverlight 应用程序,使用表单身份验证来登录用户。我们有一个使用 RequiresAuthentication 保护的 RIA 服务,以及一个没有被保护的 ErrorHandlingService 和一个 LoggingService。

最近,我们似乎收到了对我们的 ErrorHandlingService 的请求的垃圾邮件 - 大约 50 pr。第二 - 在 IIS 日志中生成以下输出:

2013-10-01 11:19:12 xxx.xxx.xxx.xxx POST ...ErrorService.svc - 80 - xxx.xxx.xxx.xxx Mozilla/4.0+(兼容;+MSIE+8.0;+Windows+NT +6.1;+Trident/4.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+Media+Center+PC+6.0; +.NET4.0C;+.NET4.0E;+InfoPath.2;+MS-RTC+LM+8) 403 6 5 15

现在详细介绍一下设置:
ErrorHandlingService 有一个接受 Exception 包装类的方法,该方法会将异常信息记录到数据库中的表中,LoggingService 接受 LogMessage 和相同的异常包装并将消息记录到使用 NLog 文件。每当受保护的服务发生异常时,silverlight 客户端会先调用 ErrorHandlingService 记录该异常,然后再调用 LoggingService 将其记录到文件中。

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ErrorHandlingService : IErrorHandlingService
{
    public string RecordError(ExceptionTransport error)
    {
        if (error == null)
        {
            return null;
        }

        var hex = HandMadeException.CreateFrom(error);

        var res = DiagnosticsHandler.DefaultInstance.HandleException(hex);

        var fb = res.GetFeedBack(DatabaseSink.FeedBackEntryId);
        var dbId = "";
        if (fb != null)
        {
            dbId = fb.ToString();
        }

        return dbId;
    }
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class LoggingService : ILoggingService
{
    private static NLog.Logger _logger = NLog.LogManager.GetLogger("Trace");

    public void LogError(LogMessage message, ExceptionTransport error)
    {
        string log = message.Message;
        if (error != null)
        {
            log = string.Format("{0}: {1}", log, error.ToString());
        }

        switch (message.Level)
        {
            case LogLevel.Trace:
                _logger.Trace(log);
                break;
            case LogLevel.Debug:
                _logger.Debug(log);
                break;
            case LogLevel.Info:
                _logger.Info(log);
                break;
            case LogLevel.Warning:
                _logger.Warn(log);
                break;
            case LogLevel.Error:
                _logger.Error(log);
                break;
            case LogLevel.Fatal:
                _logger.Fatal(log);
                break;
        }
    }
}   

public class ErrorHandlingService : ErrorService, IErrorHandler
{
    private LogHandlingService _loggingService = new LogHandlingService();

    public ErrorHandlingService()
        : base(WcfWebUtility.CreateFactory<IErrorHandlingService>("xxxxErrorHandlingService"))
    {
    }

    public bool HandleError(Exception error)
    {
        base.RecordError(error, OnErrorRecorded, false);
    }

    private void LogError(Exception error, string errorId, bool showUserMessage)
    {
        _loggingService.Log(string.Format("Error '{0}' occured on Ecofleet v. '{1}' for user '{2}'", errorId, ProductVersion.GetEcofleetVersion(), AutologUser.Current), Autolog.DiagnosticsService.Logging.LogLevel.Error, error);
    }

    private void OnErrorRecorded(ErrorResult result)
    {
        bool showUserMessage = false;
        if (result.UserState is bool)
        {
            showUserMessage = (bool)result.UserState;
        }

        LogError(result.ErrorRecorded, result.ErrorId, showUserMessage);
    }

    ... Shortened for brevity
}

所以这就是正在发生的事情:

  • 在 IIS 日志输出中,我们看到对 ErrorHandlingService 的大量请求,但对 LoggingService 没有。
  • 没有任何内容输入到数据库中,表明错误参数为空。
  • 该应用程序运行良好,没有用户抱怨错误。我希望任何用户都会收到 55 个错误。其次是联系支持部门,或者至少注销...
  • 客户端 IP 地址似乎大部分时间都保持不变。

那么这可能是(恶意)攻击吗?或者可能是客户端版本差异(如果部署了新版本并且客户端没有下载它,它是否会针对新服务器运行旧客户端版本?)?或者是其他东西 ... ?

4

0 回答 0