CSRF token missing or incorrect (django)

После переноса сайта с хостинга jino на webfaction, при попытке отправки любой формы возникала ошибка “CSRF token missing or incorrect”. Т.е. даже залогиниться на сайт было невозможно (авторизация через админку работала нормально и на сайте после я этого был авторизован).

CSRF - это уязвимость, когда пользователи, переходя по обычной ссылке, запускают хакерский скрипт, который может от их имени передать какую-либо форму на абсолютно другой сайт (например, оставить от их имени комментарий на одном из форумов или еще что-нибудь). Сам хакер не сможет получить результат перехода по ссылке. Собственно, это и отличает CSRF от XSS (http://www.securitylab.ru/analytics/292473.php).

Все описания этой ошибки ссылаются на документацию - https://docs.djangoproject.com/en/dev/ref/contrib/csrf/, либо советом добавлять во всех формах {% csrf_token %} в темплейтах (у меня он везде добавлен) и проверить, есть ли в settings.py в MIDDLEWARE_CLASSES пункт 'django.middleware.csrf.CsrfViewMiddleware'. Это все было. И не помогало.

Выход нашел, когда сравнил MIDDLEWARE_CLASSES от вебфакшна и джино.

webfaction:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

jino:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
)

Поменяв на джиновские миддлвары - все запустилось и заработало нормально. Т.е., получилось, что ‘django.middleware.csrf.CsrfViewMiddleware’, в моем случае, не должна была быть в списке. Хотя, возможно, что после ее удаления, джанго просто не показывает ошибку, а уязвимость осталась. По крайней мере, на данный момент, проблему это решило. При следующей встрече, постараюсь решить эту проблему правильней, на данный момент знаний по этой теме не хватает.

django