WordPress用のPHPの強化

公開: 2021-06-29

WordPressはPHP上で動作し、WordPressサイトを強化する際に注意を払うべきコアコンポーネントです。 この記事では、WordPressのPHPセキュリティに関して対処できる最も一般的で手間のかからない成果のいくつかについて説明します。

注意–PHP設定を変更するときは注意してください。 設定や構文が正しくないと、Webサイトが損傷する可能性があります。 本番環境に変更を加える前に、必ず開発環境またはステージング環境で変更をテストしてください。

目次

  • 最新のPHPバージョンを使用する
  • PHPバージョンを抑制します
  • phpinfo()ファイルを削除します
  • PHPのエラーと警告を抑制します
  • 制限には以下が含まれます
  • リモートファイルインクルードを無効にする
  • 危険な機能を無効または制限する
  • 機密ディレクトリでのPHPの実行をブロックする
  • 結論

最新のPHPバージョンを使用する

オペレーティングシステム、MySQLサーバー、Webサーバー(Nginx、Apache、IISなど)にパッチを適用していることを確認するだけでなく、完全にサポートされているバージョンのPHP1を実行していることを確認することも絶対に重要です。

PHPはインターネットに公開されているため(WordPressはPHPインタープリター上で実行されるため)、PHP内の脆弱性のエクスプロイトが発見された場合、攻撃のリスクが高くなります。 そのような範囲で、PHPを最新の状態に保つこと(さらには、サポート終了の5.x PHPバージョンから遠ざけること)は、攻撃の発生を防ぐだけでなく、攻撃者が攻撃をエスカレートできるようにするためにも重要です。彼らはなんとかあなたのWordPressウェブサイトへの足がかりを得ることができます(例えば、WordPressプラグインの脆弱性を悪用することによって)。

PHPバージョンを抑制します

ほとんどのWebサーバーソフトウェアと同様に、デフォルトでは、PHPはX-Powered-ByHTTPヘッダーを介して実行中のバージョンを公開します。 これ自体はセキュリティの脆弱性ではありませんが、他の状況と同様に、ソフトウェアバージョンを列挙することは、攻撃の偵察段階で攻撃者にとって一般的に役立ちます。 したがって、PHPバージョンを無効にすると、攻撃を成功させるのが少し難しくなります。

幸い、これはexpose_php設定を使用して簡単に無効にできます。 php.ini構成ファイルに、以下を追加するだけです。

expose_php = Off

phpinfo()ファイルを削除します

デバッグに使用するphpinfo()関数を使用してPHPファイルを作成することは、多くのPHPシステム管理者が抱える一般的な悪い習慣です。 攻撃者が「phpinfo」ファイル(通常、当然のことながらphpinfo.phpという名前)に遭遇した場合、サーバー上で実行されているPHPのバージョンだけでなく、Webサイトの他の側面に関する豊富な情報と詳細が提供されます。 Webおよびデータベースサーバーとして。

本当にphpinfo()を実行する必要がある場合は、次のようにコマンドラインから実行することをお勧めします。

php -i

システムに複数のPHP構成がある場合(非常に一般的)、次のコマンドを使用して、使用するphp.iniファイルを指定できます。

php -c /etc/php/apache2/php.ini -i

PHPのエラーと警告を抑制します

エラー、警告、および例外は開発中に役立ちますが、公開環境で表示される場合、攻撃者はサーバー構成、アプリケーションレイアウト、およびコンポーネントに関する洞察を得るためにこの情報を使用することがよくあります。

エラーメッセージは、情報開示への最も一般的なパスの一部であり、多くの場合、アプリケーションのインストールパスやデータベース接続の詳細などの情報が漏洩します。 エラーや警告を表示する代わりに、この情報がログに記録されていることを確認してください。 このトピックの詳細については、PHPの公式ドキュメントを参照してください。

幸い、これはdisplay_errors設定を使用して簡単に無効にできます。 php.ini構成ファイルに、以下を追加するだけです。

display_errors = Off
log_errors = On

制限には以下が含まれます

ファイルインクルードの脆弱性により、攻撃者はPHPのinclude()ステートメントを制御できます。 PHPは、インクルードされたファイル内のすべてのPHPコードを実行しますが、それ以外のものはすべて出力します(プレーンテキストであると想定)。 これは、ファイルインクルードの脆弱性を制御する攻撃者が、次のようなものを実行して、機密性の高いシステムファイルにアクセスできるようになる可能性があることを意味します。 ファイルインクルードの詳細については、この記事をご覧ください。

include "../../../../etc/passwd"

php.iniでopen_basedir設定を設定することにより、特定のディレクトリ以下のインクルードのみを許可するようにPHPに指示できます。 これはファイルインクルードの脆弱性を排除するものではありませんが、確かにそれらをより制限し、コードの実行につながる可能性のあるいくつかのより高度な攻撃を阻止します(攻撃者がサーバー上でコマンドを実行できる場合)。

php.iniファイルでopen_basedirPHP設定を次のように設定できます。

open_basedir = /var/www/html/example.com

リモートファイルインクルードを無効にする

open_basedirを使用してローカルインクルードを特定のディレクトリに制限することに加えて、リモートインクルードを無効にすることもお勧めします。 リモートファイルインクルード(RFI)攻撃は、ローカルファイルインクルード攻撃と同様に機能しますが、攻撃者がシステム上のファイルにバインドされる代わりに、リモートファイルインクルードにより、攻撃者はネットワーク経由でファイルを含めることができます。 これは非常に危険であり、ほとんどのRFI攻撃は、攻撃者がWebサーバー上で任意にコードを実行できるようになります(リモートコード実行またはRCEと呼ばれます)。

リモートファイルインクルードを無効にするには、次のようにphp.iniファイルでallow_url_fopenおよびallow_url_includePHPオプションを使用します。

allow_url_fopen = Off
allow_url_include = Off

危険な機能を無効または制限する

攻撃者がすべてのセキュリティ対策を講じているにもかかわらず、WordPressのPHPセキュリティに悪用される可能性のある脆弱性を見つけることに成功した場合、最後に必要なのは、サーバー上で任意のコードを実行できるようにすることです。 。 攻撃者がサーバー上で任意のコードを実行できる場合、Webシェルをインストールするか、リバースシェルを確立してサーバーをさらに制御し、それを使用して不正な入札(マルウェアの拡散、フィッシングキャンペーンや拒否のためのWebサイトの使用など)を行う可能性があります。サービス攻撃、またはマイニング暗号通貨)。

shell_exec()やsystem()などの関数を無効にすることで、ユーザーや攻撃者がこれらの危険な関数を利用するのを防ぐことができます。 これらの機能を使用する正当な理由があるかもしれませんが、それらはごくわずかであり、その中間にあり、通常、同じ結果を達成するためのより安全な方法があります。

注意–実行している一部のソフトウェア/プラグインは(できれば合法的に)これらの機能に依存している可能性があるため、これを本番環境で実行する前に、テスト環境またはステージング環境で以下を徹底的にテストしてください。

以下は、php.iniファイルのdisable_functions設定を使用してPHPで無効にする可能性のある潜在的に危険な関数のコレクションです。

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid,
posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,
posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, 
posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, 
posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, 
proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo</em>

機密ディレクトリでのPHPの実行をブロックする

デフォルトでは、テーマ、プラグイン、画像、ビデオ、その他のファイルをWebサイトにアップロードするために使用されるwp-content / uploadsディレクトリで、PHPコードを実行できます。 これはかなり危険です。攻撃者がプラグインまたはテーマのファイルアップロードの脆弱性を利用できる場合、Webシェルまたは同様の種類のバックドアをアップロードできる可能性があります。 PHPの実行はwp-content / uploadsディレクトリ内で許可されるため、攻撃者は実際にそのPHPコードを実行して、悪意のある入札を行うことができる可能性があります。

これを防ぐことは実際には非常に簡単です– wp-content / uploadsとディレクトリ内でPHPの実行を無効にします。 単純な方法は、 .htaccessを使用して、 *。phpファイルへのアクセスをブロックすることです。

<Files *.php>
deny from all
</Files>

ただし、上記の構成は比較的簡単にバイパスできます。ほとんどの場合、PHPは.phtml.php3ファイルを喜んで実行します。 最も防弾の方法は、ディレクトリ内のPHPエンジンを文字通り無効にすることです。 次の.htaccess設定は、wp-content / uploadsおよびwp-includes(攻撃者が一般的に標的とする別のディレクトリ)ディレクトリ内に配置する必要があります。

php_flag engine off

WordPressのPHPセキュリティ–最終的な考え

WordPress自体は堅牢で安全なプラットフォームと見なされますが、WordPressのインストールが実行される環境とインフラストラクチャは、Webサイト全体の安全性を確保するのに大いに役立ちます。 このPHPセキュリティ強化ガイドでカバーされているトピックを実装すると、2番目の防御線が提供され、WordPress Webサイト内の脆弱性を悪用した後、攻撃者が攻撃をエスカレートすることが非常に困難になります。

WordPressサイトを強化する方法について詳しく知りたい場合は、WordPressのセキュリティと強化に関する最も信頼のおけるガイドをお読みください。

この記事で使用されている参照[ + ]

この記事で使用されている参照
1 https://www.php.net/supported-versions.php