понедельник, 23 ноября 2009 г.

Django CSRF

В Django недавно появилась вкюченная по умолчанию защита от CSRF. Т.е. если у вас относительно старое приложение, вы обновляете Django до транка, и вдруг перестаёт работать авторизация - это ОК, так и должно быть.

Что сделать, чтобы заработала авторизация ? Проще всего всё сделать, как описано в документации. А делать там немного, если вы юзаете стандартный RequestContext в своих вьюхах, а именно:

  • добавить мидлварь 'django.middleware.csrf.CsrfViewMiddleware'
  • добавить тег {% csrf_token %} во все шаблоны, где есть формы с post, сразу после тега form
После этого должно всё работать без лишних вопросов.Плюсы в том, что собсно фиксится CSRF. Минусы - проблемы с тестированием. Например, я пока ничего умного не могу придумать, как это совместить с Selenium.

В документации написано, что для поиска мест, куда нужно вставлять тег {% csrf_token %}, можно заюзать тул csrf_migration_helper.py из extras, например, так: скопировать его в каталог проекта и выполнить команду
python csrf_migration_helper.py --settings=settings ./
Но на мой взгляд этот тул бесполезен, ибо не лучше простого поиска по слову form.

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

Отправить комментарий