質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Q&A

1回答

1361閲覧

ログデータの保存前にサニタイズ(バリデーション)してデータを保存するべきか

p2p

総合スコア0

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

0グッド

4クリップ

投稿2021/12/31 12:45

編集2021/12/31 13:07

前提・実現したいこと

ユーザーがPOSTしたデータはログファイルに書き込む前に絶対に手を加えるな、とこちらで学びました
その理由はデータが狂ってしまうからという理解です

しかし、それは間違ってる、という意見があります
ログデータはサニタイズ(バリデーション)されたデータを書き込まなければ、セキュリティ上問題があるという見解です

一体どちらが正しいのか、ハッキリ教えていただけないでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cx20

2021/12/31 18:08

> こちらで学びました 「こちら」とはどちらでしょうか?
m.ts10806

2021/12/31 23:06

>しかし、それは間違ってる、という意見があります 出典を明示ししてください。
m.ts10806

2021/12/31 23:06

あと「サニタイズ」と「バリデーション」は別物なので一緒くたにされるとさらに混乱の元となります。
otn

2022/01/01 08:32

> しかし、それは間違ってる、という意見があります と言った人に、セキュリティーのどの問題に対しての対処なのか確認しましょう。
guest

回答1

0

まずは双方の言い分を書いてみましょう。ただし、私は双方の当事者ではないので、想像による「言い分」です。

まず、「ログファイルに書き込む前に絶対に手を加えるな」ですが、これはログの目的から考えるとわかりやすいです。ログの目的は、「なにかあったときに、ログから原因や影響範囲を特定するため」です。ログの内容に手が加えられていると、原因分析等に妨げになります。したがって、ログをとる以上は、「ありのまま」で取る必要があります。
ただし、一つだけ例外があります。それは、ログ中にパスワードやクレジットカード番号等の機微な情報を保存していると、ログからの情報漏えいになります。このため、これらはログには保存しないか、クレジットカード番号などは一部のみを保存する(マスク表示といいます)ことが行われます。

一方、「セキュリティ上問題がある」という言い分は、おそらくLog4j2の脆弱性などを元にしているのだと思います。この脆弱性はログの内容に特定文字列を入れておくと、外部からコード実行ができてしまうという恐ろしいものです。仮にログに書き込む前に、ログのデータをサニタイズする、たとえばログ中の文字列から英数字のみを取り出して保存すれば、この脆弱性の影響は受けません。

以上が私の想像に基づく「双方の言い分」です。

しかしながら、ログに書き込む際に英数字のみを取り出すと、どんな問題があったかどうかわかりません。たとえば、外部からSQLインジェクション攻撃があり、その内容が「item=';delete from users --&range=15」だったとすると、ログに書き込まれる内容は「itemdeletefromusersrange15」となり、これでは解析ができません。「deletefrom」があるこらSQLインジェクションっぽいことがわかるのではという疑問に対しては、「item=';delete/* Hello world */from users --&range=15」とMySQL形式のコメントを使うと、ログの文字列は「itemdeleteHelloworldfromusersrange15」とますますわけがわからなくなります。

であれば、Log4j2の脆弱性に使われる記号文字、$ や { を除去する(これをサニタイズと言いますが)アイデアが浮かびますが、それはLog4j2の脆弱性情報を予め知っていないとできないのでナンセンスです。

すなわち、ログ出力ライブラリの要件として、「すべての文字列をありのままに出力できる」というものがあり、それを満たさないソフトは欠陥品なのです。誰もそんな問題があるとは思っていなかったので、Log4jの脆弱性の影響が大きいわけです。

また、Log4jの教訓により、「やはりログ出力の前にサニタイズしよう」とはなっていません。前述のとおり、それではログの意味がないからです。一方、「ログ出力に色々な便利な機能をつけるのは危険だ、シンプルであるべきだ」という意見はよく見かけます。私もその意見に同意です。

なので、まとめると、

  • ログファイルに書き込む前に絶対に手を加えるな、という意見は正しい
  • ログデータをサニタイズすると、ログの要件を満たさなくなるので、サニタイズはすべきでない
  • Log4j2の脆弱性問題からの教訓としては、ログ出力ライブラリ選定の際に、シンプルであること、余計な機能を有効にしていないことの確認が求められる

ということだと思います。

投稿2022/01/03 03:01

ockeghem

総合スコア11705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問