Symfony 1.4: Пользовательское сообщение об ошибке для CSRF в формах

Может любой говорить мне, где/как настроить маркерное сообщение об ошибке CSRF для форм в Symfony 1.4. Я использую sfDoctrineGuard для логинов и в этой форме особенно, каждый раз, когда сессия заканчивается, и у Вас все еще есть открытая страница, это бросает очень недружелюбную пользователем ошибку: "Нападение CSRF обнаруживается". Что-то как "Эта сессия истекло. Возвратитесь к домашней странице и попробуйте еще раз" звуки лучше.

Что правильный путь состоит в том, чтобы сделать это в классе формы?

Спасибо.

7
задан Tom 5 April 2010 в 12:40
поделиться

3 ответа

Единственный способ похоже, чтобы перезаписать sfForm :: addCSRFProtection () .

В /lib/form/BaseForm.class.php вы можете добавить этот фрагмент кода:

class BaseForm extends sfFormSymfony
{
    public function addCSRFProtection($secret = null)
    {
        parent::addCSRFProtection($secret);
        if (array_key_exists(self::$CSRFFieldName, $this->getValidatorSchema())) {
            $this->getValidator(self::$CSRFFieldName)->setMessage('csrf_attack', 'This session has expired. Please return to the home page and try again.');
        }
    }
}

После вызова родительского метода вы получаете валидатор, связанный с полем CSRF, и изменяете сообщение для кода csrf_attack .

Изменить: Вам также необходимо проверить, существует ли валидатор. У некоторых форм может быть отключена защита от CSRF!

Надеюсь, это поможет!

5
ответ дан 6 December 2019 в 15:20
поделиться

В 1.4.4 мне пришлось измените код naag следующим образом ...

public function addCSRFProtection($secret = null)
{
  parent::addCSRFProtection($secret);
  if (isset($this->validatorSchema[self::$CSRFFieldName])) {
    $this->validatorSchema[self::$CSRFFieldName]->setMessage('csrf_attack', 'This session has expired. Please refresh and try again.');
  }
}

Это заработало, хотя бит 'csrf token:' все еще появляется в сообщении об ошибке.

2
ответ дан 6 December 2019 в 15:20
поделиться

Использовать диспетчер событий. Посмотрите это http://bluehorn.co.nz/2010/07/15/how-to-change-csrf-attack-message-in-symfony-1-2/

Я написал это для Symfony 1.2, но с использованием диспетчера событий, поэтому он все еще может работать для Symfony 1.4.

1
ответ дан 6 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: