EC-CUBE4 でシステムエラー画面ではなくデバッグ表示させる方法


[初回公開] 2021年02月27日

EC-CUBE には「ページが見つかりません」や「システムエラー」など本来はウェブサーバ側で用意すべきエラー画面も予め用意されているが、カスタマイズしているとエラーログではわからないシステムエラーが発生することがあるため、原因追及のためにデバッグ用のエラー画面を表示する方法を紹介する。

EC-CUBE4 でシステムエラー画面ではなくデバッグ表示させる方法

1.ウェブサーバが返すエラー画面とは

ウェブサーバが返すエラー画面とは、ブラウザでアクセスした URL に該当するページが無い場合や、ページがあってもプログラムの問題で正常に表示できない場合に特定の表示を行うものである。



本来であればウェブサーバにエラーコードごとにエラー画面となる HTML ファイルを用意する必要があるが、ウェブサーバにエラー画面が無い場合はブラウザ独自のエラー画面が表示されるようになっている。

1-1.エラーコードごとに用意されている場合

ブラウザで指定の URL にアクセスした場合は、正常であればその URL のコンテンツがブラウザで表示される。
しかし、そのページが存在しなければウェブサーバはブラウザにステータスコード 404 を返すとともに、サーバが 404 を検知すると 404 専用の HTML を返してブラウザが表示するようになっている。

ウェブサーバが検知するステータスコードは正常であれば 200、アクセスに問題がある場合は 400 系、アクセスに制限がある場合は 300 系、プログラムに問題がある場合は 500 系を返すようになっている。

1-2.エラー画面を用意していない場合

ウェブサーバにエラー画面を用意していない場合はブラウザにはステータスコードが返るだけとなり、ブラウザはステータスコードに応じて独自に用意された内容を表示するようになっている。
ブラウザの IE や Edge であれば「ページが見つかりません。」が表示される。

1-3.エラー画面が表示されることの危険性

エラー画面はアクセスやページに問題があることを示す 1 つの確認手段ではあるが、表示されることで危険性もある。
例えばウェブサーバのバージョン情報が表示されるようになっていれば、そのバージョンの脆弱性を利用した攻撃を受ける可能性がある。

また、プログラムを利用している場合はプログラムのエラーの内容やファイル名などが表示されるので、プログラム情報の漏洩やハッキングや改ざんといって被害にもつながる恐れがある。



そのため、EC-CUBE などオープンソースのツールでは詳細なエラーが表示されないように予めエラー画面が用意されている場合がある。

2.EC-CUBE4 でシステムエラー画面が表示される様子

EC-CUBE4 には初期インストール時からウェブサーバが検知する HTTP ステータスコードが 400 系とそれ以外のコードの場合に下図のような独自のエラー画面が表示されるようになっている。

EC-CUBE4 のデフォルトのエラー画面

これによりエラー画面の実装を忘れていても利用者にエラーの内容までは伝わらないので攻撃につながる情報は隠すことができる。
反面、カスタマイズしている途中でエラーが発生しても上図の画面になり、どこに原因かわかりづらいため、この画面を非表示にして敢えてエラーを表示させてデバッグする方法が次となる。

3.EC-CUBE4 でデバッグ表示させる方法

EC-CUBE4 ではシステムエラーの画面になってもウェブサーバのエラーログに残らないエラーもあり、どこに問題があるかわからず原因追及が難しくなることがある。

そこで、下図のようにデバッグ表示させることでエラーの内容と、プログラムのどこに問題があるかも表示させて原因追及しやすくすることができる。

EC-CUBE4 でエラー画面を詳細に表示させる


デバッグ表示するためには EC-CUBE を設置したディレクトリの直下にある .env を次のように変更する。

APP_ENV=prod
APP_DEBUG=0
 ↓
APP_ENV=dev
APP_DEBUG=1

.env を変更すると、上図のように EC-CUBE が採用しているテンプレートシステム「Symfony」のデバッグ画面が表示される。
プログラムが実行された順番とともに問題があったファイル名と場所が表示されるのが確認できる。

また、カスタマイズなど EC-CUBE でデバッグ表示する必要が無ければ、同じく .env ファイルの変更した値を 0 に戻して不要な情報を与えないようにする必要がある。

関連記事

コメントを残す