私が見たほとんどのPHP / MySQLベースのWebサイトの構造を見ると、ログ用の情報を保存するセットアップまたは設定ファイルが常に存在するため、少し掘り下げてもデータベースパスワードを識別するのはそれほど難しくないようです。 DBに。データベースの権限がリモートリクエストに対して適切に制限されていることを確認する基本的な予防策以外に、この情報を保護するために自分のプロジェクトに実装できるオプションはありますか?
私が見たほとんどのPHP / MySQLベースのWebサイトの構造を見ると、ログ用の情報を保存するセットアップまたは設定ファイルが常に存在するため、少し掘り下げてもデータベースパスワードを識別するのはそれほど難しくないようです。 DBに。データベースの権限がリモートリクエストに対して適切に制限されていることを確認する基本的な予防策以外に、この情報を保護するために自分のプロジェクトに実装できるオプションはありますか?
回答:
パスワードの保存に関する直接的な答えではありませんが、私は通常、webappを構築するときに少なくとも2つのデータベース接続を使用します。1つはユーザー関連のアクティビティに99%の時間を使用し、制限された特権で、もう1つは「管理」機能に使用します(ユーザーの削除など)。
他の人のパッケージをインストールするいくつかのケースでは、2つのインスタンスをインストールします...一般的なユーザータイプのものを実行するためのデータベースアクセスのみを持つパブリックに面したインスタンスと、IPに制限された2番目のインスタンス「admin」タイプのアクティビティに使用する必要があるローカルサブネット(別のマシン上でも可能)。ただし、どちらもテーブルなどを変更するアクセス権はありません...ネイティブデータベースツールを使用して、webappが検証されていない独自の更新タスクを実行できるようにしたいです。
さらにそれをさらに進めることができ、特定のタスクに特に接続を追加します...ユーザー作成およびパスワード管理タスクは、ユーザーテーブルに対する追加の権限を持つユーザーを通過し、ログインには認証するためのデータベース権限がありますなど
このように、SQLインジェクション攻撃がある場合、ほとんどのWebページで実際には重要なことはできません。パスワードハッシュが表示されず、新しい管理者ユーザーを追加できません(できません)とにかく何でも)など。マシン上でシェルを取得できたとしても、まだ助けにはなりませんが、速度は低下します。
ワンタイムパスワード、Kerberos、LDAPなどを使用して、アカウントデータを保存し、ユーザーを認証/承認します。ディレクトリサービスは、ユーザー情報を保存し、アカウントデータのバックエンドとして使用するための優れた手段です。
私は、できる限りローカルソケットでPostgreSQLの「Ident」認証を使用することを大ファンにしています。そうすれば、ローカルユーザーはローカルコンピューターのUnix / Windowsユーザーに直接マッピングされ、パスワードを保存することについてまったく心配する必要はありません。ただし、これはまだMySQLのオプションではないと思います。
データベースとWebサーバーが2つの別々のマシンにある場合、SSL経由でMD5パスワードを使用します。敵がフロントエンドサーバーにアクセスできる場合、データベースとの通信方法を理解するのは時間の問題です。
パスワードがプレーンテキストで保存されている場合は、ハッシュ(MD5、SHA)、ルークを使用してください!
プログラミング言語によっては、ログイン資格情報を暗号化できますが、インタープリター言語を実行している場合、誰かがシステムにアクセスした場合に資格情報を把握できないようにする方法はありません。
C ++などを実行している場合、ソルト暗号化/復号化関数を作成/検索し、それを介して資格情報を実行し、結果のハッシュをファイルとしてシステムに保存することをお勧めします。
PHPなどを実行している場合、ラッパーを作成しmcrypt_encrypt()
て資格情報をソルトし、コード難読化を実行してハッカーがシステムにアクセスした場合にハッカーを遅くすることをお勧めします。