web-dev-qa-db-ja.com

PHPファイルではなくhtaccessでDBパラメータを宣言する安全な方法ですか?

securing PHP article では、htaccessで以下のようにディレクティブを使用する方がアプリにハードコーディングするよりも安全であることが示唆されています。

<VirtualHost ilia.ws>
Include /home/ilia/sql.cnf
</VirtualHost>

次に、以下のようにsql.cnfでパラメーターを宣言します。

SetEnv DB_LOGIN “login”
SetEnv DB_PASSWD “password”
SetEnv DB_DB “my_database”
SetEnv DB_Host “127.0.0.1”

そして最後にそれらを介してそれらにアクセスします:

echo $_SERVER[‘DB_LOGIN’]; // login
echo getenv(“DB_LOGIN”); // login 
7
ALH

これは合理的なアプローチです。この方法の利点は、パスワードをソースコードに保存する必要がないことです。これは良いことです ソースコードにパスワードをハードコードしないでください

(もちろん、この提案では、データベースパスワードは_.htaccess_ファイルに格納されません。代わりに、別の構成ファイルに格納されます。ただし、違いは重要ではありません。)

重要:_sql.cnf_がWebルート内に格納されていないことを確認してください。 Webルートに保存されている場合は、適切なパスを知っている人なら誰でも、GETリクエストを送信するだけでリクエストできるでしょう。

  • Webroot内の_sql.cnf_ファイルにパスワードを保存することにはさらにリスクがあります。これは少しあいまいですが、Web rootの外にファイルを配置することで簡単に回避できます。考慮してください:テキストエディターを使用して_sql.cnf_を編集していて、編集中に接続が切断された場合、エディターは_sql.cnf_ファイルのコピーをバックアップファイルに自動的に保存します:例:_sql.cnf~_(同じディレクトリ内)。これで、バックアップファイルの拡張子が異なるため、誰かがそのファイルをフェッチしようとした場合、Apacheサーバーはファイルのコピーを平文で提供し、データベースのパスワードを明らかにします。詳細は CMSを利用するサイトの1%がデータベースパスワードを公開する を参照してください。

一般原則の詳細については:

3
D.W.

推奨事項は、PHPファイルは誰でも読み取り可能ですが、.htaccessファイル/ httpd.confは読み取れないという事実に基づいています。作成者は、これらの値を非表示にするために暗号化を使用すると、 tヘルプ-それは、暗号化キーがPHPコードにアクセスできる必要があることを意味します。しかし、環境に値を保存すると、他の方法でも回避できるいくつかの問題が回避されるだけです。httpdの値。 confファイルは、サーバーで実行されるすべてのPHPコードによって読み取り可能になります。これらをvhost defnに移動すると、表示が狭くなります。これらをPHPファイル名の前に単に「.ht」を追加することによるドキュメントルート。

確かに、トークンをコードの大部分とは無関係に維持することは良い習慣です。以来

  • それらはコードとは異なる寿命を持ちます(つまり、コードとは無関係に変更する必要があり、その逆も同様です)
  • バージョン管理システムなどのコード管理機能を介して公開しないでください。
  • コードがデプロイされている場所によって異なります(つまり、テスト/ステージ/ライブの異なるトークン)

ただし、webserver configを使用することは、これを達成するための1つの方法にすぎません-他の有効なアプローチがあります。

どちらのルートを取るかに関係なく、ソリューションのセキュリティはすべての側面を考慮することから得られます-ファイルの許可/ファイルのアクセス可能性、DB接続の制限、DBでのアクセス制御

3
symcbean

これにはいくつかの注意点があります。最初のパスは/home/ilia/sql.cnfがWebサイトのwebroot内にないか、または攻撃者が単にURLにアクセスすることを望んでいます http:// ilia .ws/sql.cnf データベースの資格情報を表示します。

さらに、phpinfoが$ _SERVER配列をダンプし、このページの訪問者にデータベース資格情報を開示するため、Webサイトにさまざまな情報開示バグやphpinfoページが含まれていないことを期待します。

さらに、PHPファイルと環境変数の両方に格納されている場合、攻撃者が情報を取得するのは困難であるとの想定はごみです。この例では、すべてのページリクエストに環境変数を設定しています。つまり、sql.confファイルを読み取る権限を持たない可能性があるディレクトリトラバーサル攻撃は、おそらく/ prof/self/environを読み取り、資格情報をそのように取得する権限を持っている可能性があります。

データベースサーバーがループバックインターフェイスにバインドされていること、データベース資格情報に最低限の権限があり、Webアプリケーションとサーバーソフトウェアに適時にパッチが適用され、資格情報がphpファイルに格納されていることを確認します。

0
wireghoul