8

サイト全体の暗号化キーとDBアクセス情報をdocument_rootに保存するのは好きではないので、ApacheのSetEnvファイルとphp.iniファイルをconf.dに使用して、これらをコードベースから分離していました。大きな問題は、どちらが良いかということです。Apache vhostファイル()の下の環境変数のSetEnv SITEKEY 'oinkoink!'内部またはconf.d / xxx.iniファイル(db_pass="oink?")の内部?多分何か他のもの?

長所と短所:

SetEnv:

+DOCUMENT_ROOTの外部に保存+指定さ
れた仮想ホストのみがアクセスできます
-PHPINFO()で表示可能-ハッカーはファイルへの直接アクセス/アップロードエクスプロイトが必要です

get_cfg_var:

+ DOCUMENT_ROOTの外部に保存
+PHPINFO()では表示されない
-(非常に悪い)定義されたすべてのini変数が含まれているため、各仮想ホストは(ini_get_all)を介してそれらをクエリできるため、共有仮想ホスト環境では使用できません

4

3 に答える 3

5

*.ini と SetEnv が Web ルート (ドキュメント ルート) の外にある限り、どちらの方法でも問題ありません。好きな方を選んでください。私は SetEnv が好きですが、それは本当に個人的な好みです。変数は に入れられるので、 SetEnv を使用する方が理にかなっています_SERVER。.ini については、コードの動作に固有の初期化設定のために残しておく方が理にかなっていると思います。

ドキュメントルートの下に保存しないことは、おそらく安全なデータへのアクセスを防ぐための良い考えです.

phpinfo()設定されているすべてのサーバー変数がリストされることに注意してください。そのため、十分に注意してください。

最後に、ファイルを含める場合は../../、ユーザーによる不当な設定を許可しないようにしてください。そうしないと、潜在的に安全なファイル ( /etc/passwd! を含めても)にアクセスできるようになります。

あなたの主な質問は「いかに安全か」だと思います。まあ、これはおそらく、大きな頭痛を引き起こすことなく得ることができるのと同じくらい安全です. PHP コードはこれらの変数にアクセスできるため、それらを出力すると簡単に確認できるため、コード ベースの安全性に依存します。MySQL で LDAP を使用することは可能かもしれませんが、それは非常に面倒なことのように思えます。

于 2011-07-02T02:11:20.350 に答える
1

document_rootの外部に非公開ファイルを保存するのが一般的な方法です。典型的なレイアウトは次のようになります。

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

PHPのものをdocumentRootに保存し、すべての非公開のものをnonPublicFilesに保存します。documentRootは、vHostのApachedocument_rootになります。nonPublicFilesは外部にあるため、Apacheは要求に応答しません。

リカードセキュリティ、SetEnvまたは* .iniは同等である傾向があります。誰かが任意のPHPコードを実行する権限を取得した場合、どちらの方法でもこのコードに適切な情報が提供されます。

Apacheはこれらの詳細自体を開示しないため、SetEnvおよび*.iniメソッドを使用することをお勧めします。スクリプトが必要です。

設定を誤ると、スクリプトがなくても、 nonPublicFilesの内容が開示される可能性があります。

非PublicFilesを使用する場合は、事前にスクリプトを準備します。このスクリプトは、すべてが正常に設定されているかどうかを確認し、問題が見つかった場合はメールを転送します。おそらくCRONを使用して呼び出します。

于 2011-07-02T01:49:47.847 に答える
1

私は、apache だけがアクセスできる非パブリック フォルダーか、document_root の外にそれらを保存することを好みます。

于 2011-07-02T03:49:52.633 に答える