0

現在、アプリケーションのセキュリティを最終決定しています。

私があなたの専門家に持っている1つの質問は、誰かが私のUNIXプレートフォームを制御して、ある種のmysqlログからパスワードを抽出する方法があるかどうかです。

phpとmysql間の通常のパスワード転送は次のように行われます。

$sql = "CALL client_create(?, ...)";
$stmt = $cnx->prepare($sql);
$stmt->execute(array($hashpw, ...));
$cnx->commit();

autocommitそれが何かを変えたとしても、私のセットアップには何もありません。

つまり、基本的には、何らかのやり直しログなどが必要ですよね?それはどうですか、それは懸念すべきですか?たまに洗い流すべきですか?

ご協力ありがとうございました!

4

1 に答える 1

2

あなたが恐れていることは絶対に可能です。ただし、それは実際には問題ではありません。説明させてください:

MySQLは現在、さまざまな種類のログを使用しています。

  1. バイナリログ-これらはレプリケーション用であり、すべての書き込みクエリが(可逆的なバイナリ形式で)書き込まれます。レプリケーションを実行している場合は、これらのログが必要です。
  2. クエリログ-これらはデバッグ用です(通常)。これらは本番環境では有効にされないことがよくあります(無効にする必要があります)。
  3. InnoDBトランザクションログ-これは、トランザクションがACIDに準拠できるようにするためにすべての書き込みに使用されます(詳細はこの回答の範囲外です)。
  4. その他のログ-ここで心配する必要はありません(エラーログ、遅いクエリログなど)。

したがって、データは通常、少なくとも1つのログファイルに書き込まれますが、場合によっては3つに書き込まれます(サーバー構成によって異なります)。

ただし、ディスクにも書き込まれます。これは、テーブルスペースに適度にプレーンテキスト形式で格納されます。したがって、(攻撃者として)ディスクにアクセスできる場合は、ログをスキップして、テーブル情報自体を確認します。

これで、データベースレイヤーでパスワードを「ハッシュ」している場合(つまり、プレーンテキストのパスワードがクエリに入力され、データベースがハッシュ関数を発行する場合)、ログでプレーンテキストのパスワードが生成される可能性があります。 。

それはそれだけの価値はありません

ログをフラッシュしてこの情報を隠そうとする価値はありません。ソースから問題を修正することをお勧めします(アプリケーションでより適切なハッシュ方法を使用してください)。

問題は、MySQLが使用するハッシュが単純なプリミティブハッシュ(MD5()またはなどSHA256())であるということです。どちらも高速になるように設計されています。したがって、テーブルからハッシュされたものを取得できれば、生のパスワードを使用するのとほぼ同じくらい簡単に攻撃できます。なんで?高速ハッシュはGPUを使用するとブルートフォース攻撃が容易であるためです。

TLDR

基本的に、あなたは2つのことをしなければなりません(少なくとも私の観点から):

  1. 人々がDBのファイルシステムにアクセスできないようにします。これが何よりもまずです。
  2. 適切なパスワード保存技術(bcryptなど)を使用します。これにより、ログファイルがもたらす可能性のあるベクトルが軽減されます。
于 2013-03-15T17:18:57.860 に答える