sfFormのバリデーションエラーメッセージがエスケープされない

公式のドキュメント読みつつ sfForm を試しているのですが、何も考えずに使うとまずそうなのでメモ。

http://www.symfony-project.org/book/forms/1_1/en/02-Form-Validation

ここの例に書いてあるようにテンプレートファイルで、

<?php echo $form ?>

と書いておくと、フォームフィールドと同時にバリデーションのエラーメッセージも自動的に出力してくれるのですが、そのエラーメッセージがエスケープされないのでこのままだとXSS脆弱になってしまうっぽい。

all:
  .settings:
    escaping_strategy:      true
    escaping_method:        ESC_SPECIALCHARS

は設定しています。

先のドキュメント内の例で言うと、

<?php
class ContactForm extends sfForm
{
  public function configure()
  {
    // ...
 
    $this->setValidators(array(
      // ...
      'message' => new sfValidatorString(array('min_length' => 4), array(
        'min_length' => 'The message "%value%" is too short. It must be of %min_length% characters at least.',
      )),
    ));
  }
}

カスタムエラーメッセージ内に「%value%」を使っている場合はアウトで、エラーメッセージ内のユーザ入力値がそのまま出力されてしまいました。

この場合は「%value%」使うなで済むかもしれないけど、もっと厄介なのはデフォルトでfalseに設定されいる「allow_extra_fields」というやつ。

バリデーションルールに登録されていないフィールドがリクエストパラメータに含まれているとエラーを出すというもので、これ自体に問題はないというか重要な機能だと思うのですが、問題はこの機能のデフォルトのエラーメッセージ。

このエラーメッセージ内には不正なフィールドの名前が含まれており、以下のようになっている(この例では「is_admin」が不正なフィールド名)

Extra field is_admin.

で、この「is_admin」の部分が「echo $form」とかやってるとHTMLエスケープされずに出力されてしまうと。

んーこれって問題にならないんでしょうかね?


ちなみに、symfony version 1.1.0 です。