TODO #21985

baserCMS4系でメールプラグインのindexアクションを実行すると500エラーが発生する事象対応

村上 彬6日前に追加. 2日前に更新.

ステータス:担当開始日:
優先度:通常期日:
担当者:村上 彬進捗率:

0%

カテゴリ:-
対象バージョン:4.2.0

説明

とある案件で脆弱性診断を行ったときに発覚しました。
下記のようなURLにアクセスするとエラー「500 Internal Server Error」発生します。
https://catchup.co.jp/mail/
※MailプラグインのMailコントローラのindexアクション(メールフォームを表示する)

下記の箇所でメールコンテンツのデータを保持していない状態でメールコンテンツのテンプレートをレンダリングしようとしていることが原因のようです。
lib/Baser/Plugin/Mail/Controller/MailController.php

public function index() {
... 
#224 $this->render($this->dbDatas['mailContent']['MailContent']['form_template'] . DS . 'index');

indexメソッドの先頭でデータを保持しているかチェックし保持していない場合404エラーを返却すれば回避できそうです。

/**
 * [PUBIC] フォームを表示する
 *
 * @return void
 */
    public function index($id = null) {
        if (!isset($this->dbDatas['mailContent']['MailContent'])) {
            $this->notFound();
        }

実装は私が担当いたします。
以上、よろしくお願いいたします。

履歴

#1 村上 彬6日前に更新

  • 説明 を更新 (diff)

#2 村上 彬6日前に更新

  • 説明 を更新 (diff)

#3 村上 彬6日前に更新

  • 説明 を更新 (diff)

#4 江頭 竜二2日前に更新

村上さん、「メールコンテンツのデータを保持していない状態で」というのはどうやって再現できますか??

#5 村上 彬2日前に更新

>江頭さん

村上さん、「メールコンテンツのデータを保持していない状態で」というのはどうやって再現できますか??

お疲れ様です。ご確認ありがとうございます!
あまり詳しい処理の流れは追えていないのが正直なところですが
単に下記のようなURLにアクセスするとその状態になります。
https://catchup.co.jp/mail/
こちらのURLを呼び出すとメールプラグインのメールコントローラのindexアクションが実行されますがおそらくその前に行うべき処理が実行されていないため「$this->dbDatas」に値が格納されていない状態になることで今回の事象が発生しているようです。

#6 江頭 竜二2日前に更新

通常の動作では再現できず、脆弱性診断の際だけ発生したという事でしょうか?

最新版で、「mail」というメールフォームを作成して、公開ページにアクセスすると、普通に表示できて再現できないんですよね。

他の形式にエクスポート: Atom PDF