5

タイトル通り。本番コードでは、リクエストパラメータまたはフォーマットの検証に失敗した場合のログレベルはどれくらいですか?

私はこのパズルベースを2つの点で混同しています:

(1)エラーに記録した場合。1人のハッカーがあまりにも多くのエラーリクエストを送信すると、APPログに2つのエラーログが発生するのではないかと心配しています。

(2)しかし、デバッグまたはそれ以下のレベルにログに記録した場合。本番アプリが原因で問題を効果的に追跡できないことが懸念されます。ログは警告するように設定されます。

それで、私の選択は何ですか?

4

3 に答える 3

8

システムエラーがなく、入力データが無効であるために検証が失敗した場合は、情報または警告としてログに記録します。データベース接続の失敗やnullポインタなどのシステム例外などの問題がある場合は、エラーをログに記録します。それ以外の場合、入力検証は必ずしもエラーとして構成されるとは限らず、通常どおりのタイプの発生であるため、情報レベルになります。

「多すぎるリクエスト」を送信するスクリプトを繰り返し実行するハッカーの場合、これはサービス拒否攻撃として分類される可能性があります。この場合、ファイアウォールソフトウェアがそれらをフィルタリングするように設定されていることを確認する必要があります。これについては、アプリログで心配する必要はありません。

最後に、ハッカーがサービス拒否のしきい値でシステムを攻撃していない場合は、この種の「不正な検証」をキャッチし、明確なエラーメッセージとともにエラーをログに記録するロジックを作成する必要があります。探すことを知っている、つまり特別な種類のエラー。そのような例の1つは、SQLインジェクション攻撃であり、フォーム検証がキャッチする可能性があります(アプリの一部のレイヤーは確実にキャッチする必要があります)。

使用するロギングフレームワークの種類によっては、このシナリオに対して独自のエラーレベルまたはエラーカテゴリを定義できる場合があります。

于 2012-07-16T01:57:26.300 に答える
2

私のプログラムでは、エラーログレベル(またはメッセージ内の「エラー」という単語)を使用して、プログラムが「指示されたこと」を実行できなかったことを示しました。それで、これは「指示通りに」行うのに失敗したのでしょうか?警告ログレベルを使用して、どこかで問題を示している可能性が高い(ただし確実ではない)異常なことを報告します。

これらの「リクエストパラメータ」はどこから来ていますか?これがクライアントサーバーシステム(Webアプリケーション?)であり、要求がクライアントからのものである場合、サーバーは「クライアントにサービスを提供する」ように指示されています。クライアントが無効な要求を送信した場合、サーバーは何を意味しますか(指定/設計)?おそらく、要求を拒否し、拒否メッセージをクライアントに返すためです。その場合、サーバーは、要求を拒否することもメッセージを返すこともできなかった場合にのみエラーになります。つまり、サーバーのバグのみが「エラー」としてカウントされます。警告レベルで無効なリクエストパラメータを報告しますか?クライアントプログラムも提供した場合、無効な要求はクライアントプログラムのバグを示唆するため、警告としてログに記録します。クライアントが制御されていない場合(たとえば、Webブラウザー)、警告として報告しません。

于 2012-07-16T12:12:07.740 に答える
1

どちらとも言えません。リクエストをデータベースに書き込んで、いつでもクエリできるようにします。ログは、問題が発生したときに解読するのが難しい投棄場所になる傾向があります。リクエストやレスポンスが届いたらいつも見たいです。

ハッカーやサービス拒否に関しては、それを検出して阻止するためのロジックを組み込む必要があります。ルールでは、ランダムなソースからの大量のトラフィック(良いこと)と、協調して動作する1つ以上の悪意のあるソースを区別する必要があります。あなたはそれができると思いますか?

于 2012-07-16T01:48:17.707 に答える