Как отключить защиту / проверку CSRF для формы в Symfony 1.4

Маркер csrf обеспечивает защиту ваших форм от подделки межсайтовых запросов (CSRF), атаки, которая заставляет конечного пользователя выполнять нежелательные действия в веб-приложении, в котором они в настоящий момент проходят проверку подлинности. В некоторых проектах из-за отсутствия symfony для определения нескольких форм одной и той же сущности в представлении вы в конечном итоге создадите форму вручную с помощью HTML (это означает, что в представлении не было визуализировано ни одного экземпляра sfForm и нет CSRF). защита включена), однако для хранения информации из массива используется связыватель по умолчанию Symfony, например:

 "Hello World",
"content" => "Bla bla bla ..."
);
// Define the form
$this->form = new SomeModelForm();
// Deal with the request
if ($request->isMethod('post'))
{
$this->form->bind($formData);
if ($this->form->isValid())
{
// Rest of logic
}
}

Процесс связывания, если данные совпадают с определенной моделью, будет успешно связан, однако вы увидите исключение, которое указывает, что форма недействительна, поскольку поле _csrf_token недоступно (если в вашем приложении включена защита csrf). проект):

500 Внутренняя ошибка сервера: _csrf_token [Обязательно.]

В таком случае, если вы знаете, что делаете, и понимаете, что значит отключить _csrf_token, например, если CSRF не нужен, скорее, используются ключи API или что-то в этом роде, вы сможете отключить его не глобально, а конкретно для каждой формы, которая вам нужна, с помощью одной строки кода.

Отключить токен CSRF в единой форме

Чтобы отключить защиту CSRF в вашей форме, просто вызовите из нее метод getValidor, который в качестве первого аргумента ожидает имя токена CSRF (сгенерированного автоматически из метода getCSRFFieldName) и из возвращенного значения вызовите setOption метод из него, определяющий обязательную опцию в false.

Что вы в основном делаете, это устанавливаете _csrf_token поле не обязательно, поэтому ваша форма будет действительной и все:

form = new SomeModelForm();
// Disable CSRF protection
$this->form->getValidator($form->getCSRFFieldName())->setOption('required', false);
// Rest of logic, where the form will be valid 

Ссылка на основную публикацию
Adblock
detector