2011-07-02 8 views
8

sitewide暗号鍵とDBアクセス情報をdocument_rootに格納するのが好きではないので、私はApacheのSetEnvとphp.iniファイルをconf.dの下でコードベースから分離していました。大きな疑問は、どちらが優れているかです。 apache vhostファイル(SetEnv SITEKEY 'oinkoink!')またはconf.d/xxx.iniファイル(db_pass="oink?")の下にある環境変数の中に?多分何か?SetEnvまたはphp.iniでDB変数をどのくらい安全に保存していますか?

PROS N CONS:

するSetEnv:

+ DOCUMENT_ROOT外部に格納され
+のみ与えられたバーチャルホストをするphpinfo()と - 可視アクセス
持っています - ダイレクトアクセス/アップロードファイル
に活用する必要がハッカーを

get_cfg_var:

+ DOCUMENT_ROOT
外部に格納されていますはのphpinfo()で+は表示されません
は - (VERY BAD)すべての定義されたINI変数が含まれているので、各バーチャルホストは(ini_get_all)を介して、それらを検索することができ、共有のバーチャルホスト環境ではそれほど使用できません

答えて

4

* .iniとSetEnvがWebルート(ドキュメントルート)の外側にある限り、いずれにしても問題ありません。あなたが好きなものを選んでください。私はSetEnvが好きですが、それは本当に個人的な好みです。変数が_SERVERに置かれているので、SetEnvを使うのは私にとってもっと意味があります。 .iniを使用すると、コードの仕組みに固有の初期設定のままにしておく方が理にかなっていると思います。

ドキュメントルートの下に格納しないことは、セキュリティで保護されたデータへのアクセスを防ぐことをお勧めします。

phpinfo()には、設定されているサーバー変数がすべてリストされるので、それには非常に注意が必要です。最後に

、あなたがファイルに含めている場合、あなたは無償../../が何らかの形でユーザーが設定した許可していないか、彼らは(さえ/etc/passwd含む!)潜在的に安全なファイルへのアクセス権を持っていることを確認してください

私はあなたのメインを考えます質問は「安全な方法」です。まあ、これはおそらく大きな頭痛を引き起こすことなく得ることができるほど安全です。 PHPコードはこれらの変数にアクセスできるので、それらを印刷すると簡単に表示されるので、コードベースの安全性にもよります。 MySQLでLDAPを使用することは可能かもしれませんが、それは大きな痛みのように聞こえます。

1

それは一般的な方法ですdocument_rootの外部に非公開ファイルを格納するために使用します。

.../myProject 
.../myProject/documentRoot 
.../myProject/documentRoot/.... 
.../myProject/nonPublicFiles 
.../myProject/nonPublicFiles/... 

ストアのDocumentRootnonPublicFiles内のすべての非公共のもので、あなたのPHPのもの:典型的なレイアウトは、この可能性があります。 documentRootは、vHostのApache document_rootになります。 nonPublicFilesが外部にあるため、Apacheは要求に応答しません。

Recardingセキュリティ、するSetEnvはまたは* .INIは同等になりがち:ケースで誰かが任意のPHP-のコードを実行する権利を獲得し、両方の方法は、このコードに賢明な情報を提供します。

Apacheはこれらの詳細自体を開示することはありませんので、私は、するSetEnv* .INI方法を好むだろう。スクリプトが必要です。

誤設定は、スクリプトなしでnonPublicFilesの内容を開示することがあります。

あなたはすべてが細かい設定し、それが問題を発見した場合は、電子メールを転送しているかどうかを確認する先行するスクリプトを、準備、nonPublicFilesを使用しようとしている場合場合。おそらくCRONを使って呼び出すでしょう。

+1

"誰かが任意のPHPコードを実行する権利を得た場合..." - このようなことが起きた場合、賭けはすべてオフになり、db credをどこに格納しても完全にpwnされます。 – Asaph

1

私は非公開のフォルダに格納することをお勧めします。これは、apacheだけでアクセスすることも、document_rootの外部からアクセスすることもできます。

関連する問題