2021.05.06

【WordPress】【セキュリティ対策】不適切な例外処理を制御しよう

こんにちは、webエンジニアのゾノ( @ozonosho )です。

前回の記事に続いて、今回もWordPressデフォルト設定のままだとセキュリティ上宜しくないポイントについて書きます。

今回は不適切な例外処理(≒エラー時の対応)の制御についてです。

WordPressをそのまま利用していると、

  • 不正なリクエストを送信すると500エラーになる
  • エラーの生じるページにアクセスするとWPのエラー画面になる(例「サイトで技術的な問題が発生しています」と表示されるページ)

といった例外処理になります。

前者の場合、サーバ内部エラーを出してしまっているため、予期せぬ不具合を招いたり、最悪の場合にはシステム障害やシステム停止に繋がる可能性があります。

後者の場合、WordPressを利用しているサイトであることを推測されてしまいます。
(WordPressサイトだと推測されることによるセキュリティリスクはこちらの記事こちらの記事を参照ください)

これらはすべて、「エラー時に自前の404ページ等を表示させる」など適切な例外処理を設けることで回避することができます。

具体的には、下記2つの対策を行います。

①サーバー内部エラーを拾って適切な例外処理をおこなう

functions.php内に下記のようなコードを記載することで実現できます。

function isFatal($severity) {
  return boolval($severity & (E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR));
}

// エラーページの表示
function showErrorPage() {
  wp_redirect(esc_url(home_url("/404"))); //エラー時に表示させるページ
}

// 例外発生
set_error_handler(function($severity, $message, $file, $line){
  return true;
});

// 例外以外のエラーを補足する
register_shutdown_function("shutdown");
function shutdown(){
  $error = error_get_last();
  if(empty($error)) return;
  // FATALの場合はエラーページ表示
  if (isFatal($error["type"])) {
      showErrorPage();
      exit();
  }
}

②WordPressのエラー画面を利用しない

wp-config内に下記設定を記載します。

define('WP_DISABLE_FATAL_ERROR_HANDLER', true );

不正リクエストへの対策は必須事項

サイトの脆弱性を狙った攻撃として、不正リクエストの送信(たとえば問い合わせフォームの項目にjavascriptのコードを埋め込んで実行されないか、など)はとてもメジャーな攻撃方法です。

セキュリティ要件の厳しい企業であれば納品時に必ずチェックされるポイントなので、webエンジニアはきちんと対策を講じておく必要があります。

不正リクエストにたいする対策の前提はエスケープ処理になりますが、WordPressの場合、システム全体としても上記のような脆弱性があるためぜひ参考にしてみてください。

おわりに

以上、今回の記事ではWordPressの不適切な例外処理の制御について紹介させていただきました。

当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。

あなたのサイトに理想の機能を実装!WordPressカスタマイズサービス

本サービスはあなたのWordPressサイトに理想の機能を実装するサービスとなります。 どのような機能・要望でも実現可能です! Wo......

→この記事を読む