4

データベースにアクセスするためにシングルトン PDO で PHP を使用していますが、明らかに MySQL のユーザー名とパスワードが必要です。

周知のとおり、ユーザー名とパスワードは公開ディレクトリに保存しないでください。

したがって、一連の変数を設定するようなことを行うことができますrequire 'some_path/my_secrets.php';が、これらの変数はグローバルに定義される可能性があり、これは良い考えではありません (シングルトンを使用する場合はグローバルではありませんが、それでも)。わかりました、シークレット ファイルを要求できるのは一部の関数内だけですが、それは覚えておくべきことがたくさんあります...

PHPスクリプトでプライベートデータを利用できるようにするより良い方法はありますか? また、他に取るべき手順はありますか?ありがとうございました

4

4 に答える 4

1

私は同じ問題を抱えていましたが、最初は

  • DB パスワードは、ディレクトリ内のインクルードファイルに格納されましたincludes(つまり、偶発的な PHP コードが Web ファイルから直接表示されるのを防ぐため)。

その後、別のアイデアが生まれました。もう少し複雑ですが、それでもかなり実行可能です

  • エンコードされた DB データを所有し、システムコールからデータを配信する C プログラムを作成します。ソース コード (エンコードされたパスワードを含む) は、安全な場所に所有されています。Cコードは、呼び出しがPHPなどから行われたことを確認するためにいくつかのチェックを実行する必要があります...

しかし、これはかなりコストがかかります。C は高速ですが、システムを介して常にパスワードをロードするのはコストがかかります。したがって、ゲームに APC を追加すると、全体がより簡単かつ高速になります。

  • 最初のリクエスト中に、DB データを APC 永続変数にロードします。したがって、データはメモリ内にあり、外部から取得するのがより困難になります。通常、アルゴリズムは

アルゴ

Check if APC variables are set
If yes use them
If no load them from C program, only once

APC ドキュメント

  • php-fpmたとえば、使用する別のアイデアは、パスワードを含むfpm 構成 ( rootのみが読み取り可能) 内に環境変数を設定することです。

最後に、C コードからデータを提供する独自の PHP 拡張機能を作成することもできます (拡張機能は通常 C で記述されます)。これは一部の拡張ドキュメントです。

これは、パスワードの盗用を防ぐための決定的な答えではありませんが、少なくともハッカーがパスワードを特定するのが難しくなり、より多くの知識も必要になります。

于 2013-02-23T15:14:16.237 に答える
1

私が知っているほとんどのシステムには、.htaccess で保護されたインクルード ファイルがあります。内部で構成配列を定義して完了です。最も安全な方法ではないかもしれませんが、それは多くのショップ、CRM、およびその他の Web サービスで行われています。

于 2013-02-23T15:20:40.140 に答える
0

あなたの解決策は問題ありません。

提案された解決策のほとんどは誇張されているだけで、セキュリティ レベルが少し高くなる可能性はありますが、追加の努力に値するものではありません。

セキュリティはパスワードの機密性だけに依存するべきではないためです。せいぜい、パスワードが明らかになったとしても、攻撃者はそれを使用できないため、その知識は無意味です。

これは、アプリケーション専用の MySQL ユーザーを使用し、最小権限の原則に従うパーミッションを付与し、そのアプリケーションの Web サーバーからのデータベースへのアクセスのみを許可することを意味します ( MySQL Access Privilege Systemを参照)。

于 2013-02-23T17:21:55.627 に答える
0

まず、PHP アプリで必要な場合を除き、アプリのデータベース アカウントのアクセス許可を可能な限り制限します (たとえば、適切なテーブルへの読み取りアクセス、おそらく書き込みアクセスをできるだけ少なくします)。アプリがテーブルなどを作成するために管理者アクセスを必要とする場合、それは完全にワームです。

次に、ring0 が示唆するように、データベースのパスワードをプレーン テキストで保存しないでください。https://gist.github.com/nikic/3707231のように、ハッシュ API を使用してパスワードのハッシュを保存することをお勧めします。そしてもちろん、ハッシュは他の 3 番目の場所 (少なくとも別のファイル) に保存するのが最適な場合があります。ユーザーが信頼でき、方法を見つけることができる場合、ユーザーのログイン情報からハッシュを計算することができますが、その場合、ユーザーごとにパスワード ファイルに個別のエントリが必要になる場合があります (ハッシュされた各 DB パスワードが違う)。

私はセキュリティの専門家ではありませんが、プレーン テキストは常にパスワードの保存に適していないことを知っているので、これは正しい方向への一歩だと思います。

于 2013-02-23T15:46:07.450 に答える