Является ли генерация CSRF-токена на фронт-энде плохой идеей?
В мире Django CSRF-токен генерируется таким образом, что не использует никакой информации, известной только серверу. Вполне возможно сгенерировать правильный CSRF-токен на javascript - Django с радостью примет его.
В частности, мы могли бы иметь часть javascript, которая генерирует действительный CSRF-токен и устанавливает его значение в качестве cookie.
Есть ли какие-либо недостатки, связанные с безопасностью? Единственное, о чем я могу думать, это то, что у такой cookie не может быть установлен флаг http-only (по очевидным причинам).
Короткий ответ: Нет
CSRF - это решение для ограничения CSRF-атак. Например, пользователь может вызвать функцию без CSRF-защиты в консоли браузера или с помощью расширения браузера или с помощью curl без браузера, в этом случае вы не сможете понять, знает ли пользователь о вызове этой функции или нет!
С другой стороны, вы хотите сделать новый CSRFTOKEN и отправить его на сервер с помощью ajax, а этот сервис не может защитить от CSRF. Поэтому хакеры могут использовать этот вызов ajax для подделки CSRF! И хакер может найти ваш код CSRF maker в ваших js библиотеках.
Для вашей идеи вы можете использовать некоторую информацию о пользователе и сохранить ее в информации о сессии, такую как use-agent, client-IP, и ...