1

ユーザーのサインインにフォーム認証を使用して、IIS 7.5 で動作する Silverlight アプリケーションを実行しています。RequiresAuthentication を使用して保護されている RIA サービスと、そうでない ErrorHandlingService および LoggingService があります。

最近、ErrorHandlingService へのリクエストが 50 pr のオーダーでスパムされているようです。2 番目 - 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 への要求はありません。
  • エラー パラメータが null であることを示唆するものは何もデータベースに入力されません。
  • アプリケーションは正常に動作し、エラーについて不満を言うユーザーはいません。私は、ユーザーが 55 個のエラーを受け取ることを期待しています。次に、サポート部門に連絡するか、少なくともログオフします...
  • ほとんどの場合、クライアントの IP アドレスは同じままのようです。

それで、それはおそらく(悪意のある)攻撃ですか?または、クライアントのバージョンの不一致である可能性があります (新しいバージョンが展開され、クライアントがそれをダウンロードしない場合、新しいサーバーに対して古いクライアント バージョンを実行しているのでしょうか?)? または、他の何か ... ?

4

0 に答える 0