хорошая идея, но это также оказывает давление на БД: (
Вы можете создать токен anti-XSRF без необходимости запоминать их все на сервере.
Вы можете сделать это, поместив информацию, которую вы хотите проверить, в токен, как правило, включая:
- идентификатор пользователя, поэтому один пользователь не может создать форму для другого пользователя
- метка времени истечения, чтобы токены не длились вечно
затем хешируете эту информацию вместе с секретным ключом и выплевываете ее в скрытое поле. Когда токен возвращается, вы можете просмотреть предоставленную информацию, снова хешировать ее с помощью ключа и посмотреть, соответствует ли хеш-код отправке пользователя.
Так, например, для ID пользователя 18936 с отметкой времени истечения 1304861680 (время Unix примерно сейчас) вы можете создать токен, подобный:
18936.1304861680.2A956E39.11E859E44B9308B812257BEE660330D9D0566189
, где 2A956E39 - некоторая случайная соль, а бит в конце - это шестнадцатеричный код HMAC-SHA1 хэш 18936.1304861680.2A956E39
с использованием не очень хорошего секретного ключа secretkey
.
Это достигает цели анти-XSRF, но иногда также используется одноразовый серверный сохраненный токен, чтобы предотвратить двойное представление формы. Как есть, метод хеширования не помогает с этим битом. Но в конкретном случае создания нового объекта, который представляет собой обычное место для развертывания предотвращения двойного представления, вы можете использовать токен как уникальное значение, вставленное в БД как часть нового объекта, а затем отказаться от создания новая сущность, если она уже есть с токеном.