短い答え:はい
この質問への答えは明白なはいです、そうでないと言うのは完全に無責任です。
長い答え:実世界の例
私の非常に実際のサーバーから非常に実際の例を提供することを許可しますwp-config.php
。Webルートの外に移動すると、そのコンテンツがキャプチャされなくなります。
不具合:
Pleskのバグに関する次の説明をご覧ください(11.0.9 MU#27で修正済み):
サブスクリプションをホスティングプランと同期した後、Pleskがサブドメインの転送をリセットする(117199)
無害に聞こえますよね?
さて、このバグを引き起こすために私がしたことは次のとおりです。
- 別のURLに(例えばリダイレクトするようにサブドメインを設定する
site.staging.server.com
にはsite-staging.ssl.server.com
)。
- サブスクリプションのサービスプラン(PHP構成など)を変更しました。
これを行うと、Pleskはサブドメインをデフォルトにリセット~/httpdocs/
します。インタープリター(PHPなど)をアクティブにせずにのコンテンツを提供します。
そして気づかなかった。数週間。
結果:
wp-config.php
ウェブルートでは、への要求は、/wp-config.php
WordPressの設定ファイルをダウンロードしているだろう。
wp-config.php
Webルートの外、要求/wp-config.php
を完全に無害なファイルをダウンロードしました。実際のwp-config.php
ファイルをダウンロードできませんでした。
したがって、wp-config.php
Webルートの外部に移動すると、現実の世界で真のセキュリティ上の利点があることは明らかです。
wp-config.php
サーバー上の任意の場所に移動する方法
WordPressは、WordPressのインストールの上の1つのディレクトリをwp-config.php
ファイルに自動的に検索するので、そこに移動した場合は完了です!
しかし、他の場所に移動した場合はどうなりますか?簡単です。wp-config.php
次のコードを使用して、WordPressディレクトリに新規を作成します。
<?php
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');
(必ず上記のパスを、再配置されたwp-config.php
ファイルの実際のパスに変更してください。)
で問題が発生した場合は、PHP設定のディレクティブにopen_basedir
新しいパスを追加するだけopen_basedir
です。
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
それでおしまい!
反対の議論を選ぶ
wp-config.php
Webルートの外部への移動に対するすべての議論は、誤った仮定にかかっています。
引数1:PHPが無効になっている場合、それらは既に
誰かが[ wp-config.php
]のコンテンツを見る唯一の方法は、サーバーのPHPインタープリターを迂回するかどうかです…その場合、あなたはすでに問題に直面しています。サーバーに直接アクセスできます。
FALSE:上記で説明したシナリオは、侵入ではなく構成の誤りの結果です。
引数2:PHPを誤って無効にすることはまれであるため、重要ではありません
攻撃者がPHPハンドラを変更するのに十分なアクセス権を持っている場合、あなたはすでに台無しにされています。私の経験では偶発的な変更は非常にまれであり、その場合はパスワードを簡単に変更できます。
FALSE:上記で説明したシナリオは、共通のサーバー構成に影響を与える共通のサーバーソフトウェアのバグの結果です。これはほとんど「まれ」ではありません(さらに、セキュリティはまれなシナリオを心配することを意味します)。
WTF:侵入中に機密情報が取得された場合、侵入後にパスワードを変更してもほとんど役に立ちません。本当に、WordPressはカジュアルなブログにのみ使用され、攻撃者は改ざんのみに関心があると考えていますか?誰かが侵入した後にサーバーを復元するのではなく、サーバーを保護することについて心配しましょう。
引数3:へのアクセスを拒否するwp-config.php
だけで十分
仮想ホストの設定を介してファイルへのアクセスを制限したり.htaccess
、ドキュメントルートの外部に移動するのと同じ方法でファイルへの外部アクセスを効果的に制限したり
できます。
FALSE:仮想ホストのサーバーのデフォルトがno PHP、no .htaccess
であると想像してくださいallow from all
(実稼働環境ではほとんど異常ではありません)。パネルの更新など、日常的な操作中に何らかの方法で構成がリセットされると、すべてがデフォルトの状態に戻り、公開されます。
設定が誤ってデフォルトにリセットされたときにセキュリティモデルが失敗した場合は、さらにセキュリティが必要です。
WTF:なぜセキュリティの層を減らすことを特に推奨するのでしょうか?高価な車にはロックが付いているだけではありません。アラーム、イモビライザー、GPSトラッカーもあります。何かを保護する価値がある場合は、正しく行います。
引数4:への不正アクセスwp-config.php
は大したことではない
データベース情報は、実際に[ wp-config.php
]の唯一の機密情報です。
FALSE:認証キーおよびソルトは、潜在的なハイジャック攻撃の数に使用できます。
WTF:データベースの資格情報がの唯一のものであったとしても、攻撃者が手に入れるwp-config.php
ことを恐れる必要があります。
引数5:wp-config.php
Webルートの外部に移動すると、実際にはサーバーの安全性が低下します
WordPressにアクセスできるwp-config.php
ようにする必要があります[ ]のでopen_basedir
、ドキュメントルートの上のディレクトリを含めるように展開する必要があります。
FALSE:と仮定wp-config.php
でありhttpdocs/
、ちょうどに移動../phpdocs/
し、設定open_basedir
のみ含まれるようにhttpdocs/
してphpdocs/
。例えば:
open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"
(もしあれば/tmp/
、ユーザーtmp/
ディレクトリを常に含めることを忘れないでください。)
結論:設定ファイルが常に常に必要があり、常に Webルートの外に位置すること
セキュリティに関心がある場合はwp-config.php
、Webルートの外側に移動します。