これらの回答はいずれも、ハッキングではない方法でエラーメッセージのプレフィックスとなる「CSRFtoken:」ラベルを削除する方法を説明していません(たとえば、トークン名を変更することは悪い考えです!)。
ラベルを削除する唯一の適切な方法は、CSRFバリデーターを拡張してグローバルエラーをスローすることです。これを行っている間、エラーメッセージを変更することもできます。
class myValidatorCSRFToken extends sfValidatorCSRFToken
{
protected function configure($options = array(), $messages = array())
{
parent::configure($options, $messages);
$this->addMessage('csrf_attack', 'Your session has expired. Please return to the home page and try again.');
}
protected function doClean($value)
{
try {
return parent::doClean($value);
} catch (sfValidatorError $e) {
throw new sfValidatorErrorSchema($this, array($e));
}
}
}
次に、 :をオーバーライドsfForm::addCSRFProtectionして、このバリデーターを使用するようにフォームを設定しましょう。BaseForm
public function addCSRFProtection($secret = null)
{
parent::addCSRFProtection($secret);
if (isset($this->validatorSchema[self::$CSRFFieldName])) //addCSRFProtection doesn't always add a validator
{
$this->validatorSchema[self::$CSRFFieldName] = new myValidatorCSRFToken(array(
'token' => $this->validatorSchema[self::$CSRFFieldName]->getOption('token')
));
}
}