DBパスワードの保護


18

私が見たほとんどのPHP / MySQLベースのWebサイトの構造を見ると、ログ用の情報を保存するセットアップまたは設定ファイルが常に存在するため、少し掘り下げてもデータベースパスワードを識別するのはそれほど難しくないようです。 DBに。データベースの権限がリモートリクエストに対して適切に制限されていることを確認する基本的な予防策以外に、この情報を保護するために自分のプロジェクトに実装できるオプションはありますか?


1
明確にするために、Webサイトからデータベースにログインするための資格情報を保存することを求めていますが、データベース内にWebサイトのユーザーのパスワードを適切に保存する方法ではありませんか?
ジョー

正しい; それは私が得ているものです。
カジ

回答:


10

パスワードの保存に関する直接的な答えではありませんが、私は通常、webappを構築するときに少なくとも2つのデータベース接続を使用します。1つはユーザー関連のアクティビティに99%の時間を使用し、制限された特権で、もう1つは「管理」機能に使用します(ユーザーの削除など)。

他の人のパッケージをインストールするいくつかのケースでは、2つのインスタンスをインストールします...一般的なユーザータイプのものを実行するためのデータベースアクセスのみを持つパブリックに面したインスタンスと、IPに制限された2番目のインスタンス「admin」タイプのアクティビティに使用する必要があるローカルサブネット(別のマシン上でも可能)。ただし、どちらもテーブルなどを変更するアクセス権はありません...ネイティブデータベースツールを使用して、webappが検証されていない独自の更新タスクを実行できるようにしたいです。

さらにそれをさらに進めることができ、特定のタスクに特に接続を追加します...ユーザー作成およびパスワード管理タスクは、ユーザーテーブルに対する追加の権限を持つユーザーを通過し、ログインには認証するためのデータベース権限がありますなど

このように、SQLインジェクション攻撃がある場合、ほとんどのWebページで実際には重要なことはできません。パスワードハッシュが表示されず、新しい管理者ユーザーを追加できません(できません)とにかく何でも)など。マシン上でシェルを取得できたとしても、まだ助けにはなりませんが、速度は低下します。


1
同様のことを行います。ただし、通常は、機能ごとに行うのではなく、データベースのユーザー/アプリケーションごとに新しいアカウントを作成します。これにより、2つの問題が解決されます。1)OEMなどのツールでデータベースの使用を区別できます(つまり、誰がデータベースを細かく攻撃しているかを確認できます)。2)各ユーザーが表示し、アクセスできるものを個別に調整できますデータベース。
-ScottCher


4

私は、できる限りローカルソケットでPostgreSQLの「Ident」認証を使用することを大ファンにしています。そうすれば、ローカルユーザーはローカルコンピューターのUnix / Windowsユーザーに直接マッピングされ、パスワードを保存することについてまったく心配する必要はありません。ただし、これはまだMySQLのオプションではないと思います。

データベースとWebサーバーが2つの別々のマシンにある場合、SSL経由でMD5パスワードを使用します。敵がフロントエンドサーバーにアクセスできる場合、データベースとの通信方法を理解するのは時間の問題です。


3

.NET Frameworkを使用している場合は、暗号化された接続文字列の使用を検討できます。そのようなことが他の言語/フレームワークで可能かどうかはわかりませんが、それはあなたの接続が危険にさらされないようにするためのもう一つの安全策です。

暗号化された接続文字列を使用する以外では、LDAP / Kerberos / Active Directoryを使用するのが最も安全なオプションです。


3

パスワードがプレーンテキストで保存されている場合は、ハッシュ(MD5、SHA)、ルークを使用してください!


OPは、ユーザーのパスワードの保存について尋ねていません。しかし、はい、確かにユーザーパスワードをハッシュしますが、MD5またはSHAファミリーを使用することは絶対にしないでください!bcryptまたはPBKDF2を使用します。さもなければ MD5とSHA1を使用して、単純なブルートフォース攻撃にユーザーをさらしたこれらの企業のようなニュースにすぐに気付くでしょう。
ニックチャマス

ハッシュだけでなく、確かに、塩漬けなどの技術が必要です。そして、自分自身で暗号プリミティブを実装するのではなく、広くテストされた暗号ライブラリを使用してください。
ヤシルArsanukaev

2

プログラミング言語によっては、ログイン資格情報を暗号化できますが、インタープリター言語を実行している場合、誰かがシステムにアクセスした場合に資格情報を把握できないようにする方法はありません。

C ++などを実行している場合、ソルト暗号化/復号化関数を作成/検索し、それを介して資格情報を実行し、結果のハッシュをファイルとしてシステムに保存することをお勧めします。

PHPなどを実行している場合、ラッパーを作成しmcrypt_encrypt()て資格情報をソルトし、コード難読化を実行してハッカーがシステムにアクセスした場合にハッカーを遅くすることをお勧めします。


資格情報を暗号化する場合、再度復号化するには他の秘密が必要です。または、暗号化された形式が秘密になり、攻撃者がそれを使用する可能性があります。一部の詳細が欠落しています。
ピーターアイゼントラウト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.