TODO #22050

メールフォームのセレクトボックスで、記号が含まれる値を選択してメールを送信すると、CSRFエラーが発生する

瀬戸 優一3ヶ月前に追加. 30日前に更新.

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

0%

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

説明

baser4.1.1で確認しています

リクエストで送信されるセレクトボックスの値がエスケープされたり、されなかったりして、セレクトボックスの選択肢として設定されている値との差異が出るため、発生するようです

一時的な対応としては、プラグインのControllerEventListenerにて以下の処理を行うことで対応可能です。

public function initialize(CakeEvent $event) {
    $Controller = $event->subject();

    if ($Controller->request->params['controller'] == 'mail'
    && $Controller->request->params['action'] == 'submit'
    && isset($Controller->request->data['MailMessage']['<フィールド名>'])){
        $Controller->request->data['MailMessage']['<フィールド名>'] = h($Controller->request->data['MailMessage']['<フィールド名>']);
    }
}

コアに改修を行う場合は以下の方向性がいいのかなと思います
1. メールフォームのindexで、セレクトボックスの値をエスケープせずに表示しているので、エスケープする
2. エスケープされた値が送信されると、設定値の値との差異がでるので、受け取り側でアンエスケープ処理を入れる

履歴

#1 江頭 竜二2ヶ月前に更新

  • 対象バージョン4.1.3 にセット

コードは作りました。
リリース後に権藤さんにプルリク送って、次のバージョンでリリースしたいと思います。
https://github.com/ryuring/basercms/commit/795153858ee4e20035c789bba514d8bded161e98

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

  • 対象バージョン4.1.3 から 4.1.4 に変更

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