10

機密情報がログ ファイルに記録されないようにするにはどうすればよいでしょうか? はい、最初から機密情報をログに記録しないことを意識的に選択することはできますが、一般的に、障害発生時のエラー メッセージや問題の調査中のトレース メッセージなどをやみくもにログに記録し、最終的に機密情報がユーザーのサイトに到達することがあります。ログファイル。

たとえば、顧客のクレジット カード番号を含む注文レコードをデータベースに挿入しようとしているとします。データベースに障害が発生した場合、実行したばかりの SQL ステートメントをログに記録したい場合があります。その後、ログ ファイルに顧客のクレジット カード番号が記録されます。

一般的なログ パイプラインがそれらを除外できるように、特定の情報ビットを機密として「タグ付け」するために使用できる設計パラダイムはありますか?

4

7 に答える 7

7

問題のケースに対する私の現在の慣行は、そのような機密情報のハッシュをログに記録することです。これにより、特定のクレーム (特定のクレジット カード番号など) に属するログ レコードを特定できますが、ログを取得して機密情報を悪用する権限は誰にも与えられません。

もちろん、これを一貫して行うには、適切なコーディング プラクティスが必要です。私は通常、オブジェクトに適用された属性toStringでマークされたフィールドの値のハッシュをシリアル化する (Java または .NET の) オーバーロードを使用して、すべてのオブジェクトをログに記録することを選択します。Sensitive

もちろん、SQL 文字列はより問題がありますが、データの永続性については ORM に依存し、さまざまな段階でシステムの状態をログに記録してから SQL クエリをログに記録するため、問題はなくなります。

于 2010-01-02T14:50:32.677 に答える
5

個人的には、ログ ファイル自体を機密情報と見なし、それらへのアクセスを必ず制限します。

于 2009-09-23T15:56:51.193 に答える
2

クレジットカード番号を記録すると、PCI違反になる可能性があります。また、PCIに準拠していない場合は、より高いカード処理手数料が請求されます。機密情報をログに記録しないか、ログファイル全体を暗号化してください。

機密情報に「タグ付け」するというあなたの考えは興味をそそられます。Sensitive実際の基になるデータ型をラップする、情報用の特別なデータ型を持つことができます。このオブジェクトが文字列としてレンダリングされるときはいつでも、それはただ戻る"***"か何かです。

ただし、これには広範囲にわたるコーディングの変更が必要になる可能性があり、そもそも機密情報のログ記録を回避するために必要なレベルと同様の注意深い警戒が必要です。

于 2009-09-23T15:59:23.363 に答える
1

あなたの例では、クレジットカード番号を暗号化するか、そもそも保存しないでください。

たとえば、ログインなどの他のログを記録している場合は、明示的にパスワードを ***** に置き換えたいと思うかもしれません。

ただし、これにより、最初に提起した質問への回答をうまく回避できます。一般に、機密情報を扱う場合、データベース ファイルやログ ファイルなど、あらゆる形式の永続的なストレージに転送する途中で暗号化する必要があります。悪者がいずれかを手に入れることができると想定し、それに応じて情報を保護します。

于 2009-09-23T15:56:54.383 に答える
1

フィルタリングしようとしているものがわかっている場合は、ログに記録する前に正規表現クリーニング式を使用してログ出力を実行できます。

于 2009-09-23T15:57:24.203 に答える
1

特に SQL ステートメントに関しては、言語がサポートしている場合は、ステートメント自体に値を入れるのではなく、パラメーターを使用する必要があります。言い換えると:

select * from customers where credit_card = ?

次に、パラメーターをクレジット カード番号に設定します。

もちろん、パラメーターが入力された SQL ステートメントをログに記録する場合は、機密データを除外する別の方法が必要になります。

于 2009-09-23T16:03:28.237 に答える