среда, 15 октября 2008 г.

sfUser->addCredentials() портит CSRF-защиту

Однажды, долгим зимнем вечером столкнулся с такой проблемой: на формах появилась ошибка CSRF валидации. Недолгие копания в исходниках symfomy привели меня в функцию sfUser->addCredentials(), в которой вызывалась sfSessionStorage->regenerate():

public function regenerate($destroy = false)
{
// regenerate a new session id
session_regenerate_id($destroy);
}

Вот же блин, думаю, он идентификатор меняет, поэтому и не подходит CSRF ключь. А addCredentials я как раз начал использовать в одном из своих фильтров. Ну что ж, наследуем и дописываем класс:

class sfMySessionStorage extends sfSessionStorage
{
public function regenerate($destroy = false)
{
// regenerate a new session id
// session_regenerate_id($destroy);
}
}

Регистрируем в factories.yml:

all:
storage:
class: sfMySessionStorage
param:
session_name: sid

Теперь все ок!

Комментариев нет: