質問: wp-configをwebルートの外に移動することは本当に有益ですか? 最近の最も一般的なセキュリティのベストプラクティスの1つは、 仮想ディレクトリのドキュメントルートより1ディレクトリ上のwp-config.phpを移動することです 。私はそのための良い説明を実際に見つけたことは一度もありませんが、webroot内の悪意のあるスクリプトや感染したスクリプトがデータベースのパスワードを読み取ることによるリスクを最小限に抑えることを目的としています。しかし、それでもwordpressにアクセスさせる必要があるため、open_basedirを展開してドキュメントルートの上のディレクトリを含める必要があります。それは単に目的全体を無効にするだけでなく、サーバーのログ、バックアップなどを攻撃者に公開する可能性もありますか?それとも、phpエンジンによって解析されるのではなく、wp-config.phpがプレーンテキストとしてhttp://example.com/wp-config.phpを要求している人に見せられるという状況を防ぐためだけの手法なのでしょうか。これはごくまれにしか発生しないように思われますが、ログやバックアップなどをhttp要求にさらすことのマイナス面を上回ることはありません。他のファイルを公開せずにホスティング設定でドキュメントルートの外に移動することはできますが、他の設定ではそうできません。結論:この問題について何度も話し合った結果、2つの答えが出てきました。 aaron adamsはwp-configを動かすことを支持して好例を作り、chrisguitarguyはそれに対して好例を作ります。これらは、あなたがスレッドに不慣れで、全体を読みたくない場合に読むべき2つの答えです。他の答えは冗長または不正確です。
回答: アタッカーがコードを挿入することを可能にする、悪い書かれたテーマやプラグインがたくさんあります(timthumbのセキュリティ問題を覚えていてください)。私が攻撃者になる可能性がある場合、wp-config.phpを検索する必要があるのはなぜですか?このコードを注入するだけです。var_dump( db_name, db_user, db_password ); あなたはあなたのwp-config.phpを隠すことを試みることができます。 wordpressがすべての機密情報をグローバルにアクセス可能にする限り、wp-config.phpを隠しても意味がありません。wp-config.phpの悪い部分は、機密データを保持していることではありません。悪い部分は、機密データをグローバルにアクセス可能な定数として定義することです。 アップデート define()の問題点と、機密データをグローバル定数として定義するのはなぜ悪い考えなのかを明確にしたいと思います。webサイトを攻撃する方法はたくさんあります。スクリプトインジェクションは、webサイトを攻撃するための唯一の方法です。サーバーに、攻撃者がメモリダンプにアクセスすることを可能にする脆弱性があると仮定します。攻撃者はメモリ内ですべての変数のすべての値を見つけるでしょう。グローバルにアクセス可能な定数を定義した場合、スクリプトが終了するまでそれをメモリ内に保持する必要があります。定数ではなく変数を作成すると、その変数が不要になった後にガベージコレクタがメモリを上書き(または解放)する可能性が高くなります。機密データを保護するためのより良い方法は、使用後すぐにそれらを削除することです。$db_con = new stdclass(); $db_con->db_user = 'username'; $db_con->password = 'password'; $db_con->host = 'localhost'; $db_handler = new database_handler( $db_con ); $db_con = null; 機密データを使用した後、nullに代入すると、メモリ内のデータが上書きされます。 $db_conに機密データが含まれている瞬間に攻撃者はメモリダンプを取得する必要があります。そしてそれは上の例では非常に短い時間です(クラスdatabase_handlerがそのコピーを保存しない場合)。