5

「機密」データを MySQL データベースにどのように保存する必要がありますか?

1) MySQL データベースのセキュリティを重視し、データをプレーン テキストとして保存する必要がありますか?

2) データを暗号化する必要がありますか?

  • はいの場合、暗号化はどのように行う必要がありますか?
    1. MySQL aes_encrypt/aes_decrypt を使用していますか?
    2. データの暗号化/復号化に PHP AES 関数/アルゴリズムを使用していますか?
  • データはどのように MySQL に保存する必要がありますか?
    1. BLOB
    2. バイナリ
    3. VARBINARY

私の場合、「機密」データは個人による支払いです。

ありがとう

4

4 に答える 4

4

それは両方の混合物です。2つの既存の回答(これを書いた時点でhttps://stackoverflow.com/a/10718397/1015483https://stackoverflow.com/a/10718459/1015483)が有効です-約5つの方法を見る必要があります私が考えることができる可能な攻撃

  • 彼らはあなたのDBサーバーにアクセスできます。はい、妥当な範囲でその赤ちゃんを確保してください (マットの回答)
  • スタンドアロンのデータ ハイジャック (誰かが別の方法でデータベース データにアクセスする、バックアップである可能性、パスワードを推測する可能性がある、ある場所から別の場所にデータを転送する場合の MITM である可能性があります)。このために、データを暗号化します。また、何らかの理由で CSV ダンプを作成し、誰かに電子メールで送信することもできます。おっと。しかし、それは起こります。だから暗号化する(vlzvtの答え)

しかし、言及されていない3つの要素:

  • 彼らはあなたのウェブサーバーにアクセスする可能性があります(DBサーバーとは異なる場合)。彼らがウェブサーバーにアクセスできる場合、彼らはあなたのパスワード、暗号化キーをたくさん持っているので、すべての賭けはオフです. そのため、DB サーバーよりもさらに安全にする必要があります。(マットは上記のことを意味していたかもしれませんが、明確にしてください)
  • 上記と同様ですが、忘れてはならないのは、誰かが phpMyAdmin または管理領事館にアクセスした場合です。アクセスに平文の認証または構成に保存されたパスワードを使用しないでください。
  • 最後に、アプリケーション自体があります (そしてロックダウンが最も困難です)。データを明らかにする可能性のある SQL インジェクションを防ぐ必要があります。誰かがトラップされていないクエリを介してアクセスした場合、データを暗号化すると問題を最小限に抑えることができなくなります。そのため、暗号化が解決策です。

あなたの質問のパート2について:

MySQL の暗号化/復号化機能を使用すると、未加工データにアクセスできる人を阻止できますが、MITM や SQL インジェクション、さらには転送用に取得された CSV ダンプにはアクセスできません。

したがって、IMO (これは私の意見であり、私が行った方法にすぎません) は、PHP で暗号化し、暗号化されたデータをネットワーク経由で盗み出すことです。これにより、データをトラップするすべての方法が停止し、CSV ダンプが「スクランブルされます」 "。

そうする場合は、phpMyAdmin で誤って読み取り/編集しようとするのを防ぐため、varbinary / blob タイプを使用することもできます。Plus は、名目上数バイトを節約できる可能性があります (ただし、これはインデックスやその他のものに依存しますが、それだけでは勝利の議論にはなりません)。


そして今、マイナス面:検索とソート。インデックス化または検索するものはすべて、暗号化されている場合、大文字と小文字が区別され、正しい長さにパディングされた文字列全体とのみ一致します (通常、検索では大文字と小文字が区別されず、LIKE を使用して部分検索を実行できます)。また、ORDER BY を実行する場合は、元の文字列が必要です。そのため、構造を設計するときは心に留めておいてください。

それが役立つことを願っています。

于 2012-05-23T11:33:27.207 に答える
3

攻撃者がプレーン テキスト データにアクセスした場合、考えられる最悪のシナリオは何ですか? データを有効にするためにデータを復号化する必要があり、暗号化キーもどこかにアクセスできるようにする必要があることを考えると、DB にアクセスできる攻撃者は、これが目的でない限り、キーにもアクセスできる可能性があります。ライブ Web サイトなどではなく、アーカイブします。失われる可能性のあるデータでいっぱいのHDDをカートに入れていない限り、DBサーバーのセキュリティに焦点を当てますが、実際には暗号化する必要がある理由に依存します.

于 2012-05-23T10:46:49.403 に答える
1

ハッキングされた可能性のあるデータベースのデータを保護する必要がある場合は、mcryptで暗号化できます

$key = "mykey";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$data,MCRYPT_MODE_ECB,$key);

その後、〜expectedデータサイズに基づいて、BLOB、TEXT、MEDIUMTEXTなどを選択できます。* VARBINARY / BINARYの場合、最初にパックする必要がある場合があります。

于 2012-05-23T10:51:26.870 に答える
1

暗号化操作には追加コストがかかります。

たとえば、データがかなりのサイズに成長した場合、シナリオでこの追加コストが問題になるかどうかを評価する必要があります。

データ漏洩を回避するための最初のフロンティアは、アクセスのプロファイルなどを備えた強力なデータ アクセス ポリシーです。これには、mysql を管理して構成する必要があるという欠点があります。

プロファイルの管理に注意したい場合は、CPU の追加コストと (暗号化アルゴリズムに応じて) 追加のストレージ スペースを想定して、データを暗号化できます。

システムのセキュリティは、より弱いコンポーネントのセキュリティと同等です。暗号化タスクだけに労力を集中しないでください。これは、セキュリティの感覚を与えるだけです。データを復号化できれば、侵入者が必要とするのはそれだけです暗号を破る時が来ました

于 2012-05-23T11:43:17.767 に答える