Недавно я узнал, что файлы cookie отправляются автоматически при каждом запросе. Такое поведение делает некоторые веб-сайты уязвимыми для CSRF. Насколько я узнал, CSRF можно предотвратить, используя токены CSRF, которые хранятся в клиентском JavaScript или API-интерфейсах хранилища, но НЕ в файлах cookie (чтобы предотвратить их отправку).
Мой вопрос: если бы у меня был файл cookie аутентификации и токен CSRF, почему бы просто не использовать токены вместо файлов cookie? Почему бы не полагаться только на токены, которые не хранятся в файлах cookie?
Могу ли я удалить аутентификацию cookie из своего приложения и позволить клиенту просто отправлять токен в заголовках или что-то в этом роде (возможно X-Authentication-Token
).
Я думаю, что у этого подхода есть много преимуществ, например, отсутствие необходимости хранить и управлять двумя UUID в базе данных, а также отсутствие необходимости отправлять токен CSRF в теле. Что вы думаете?
Да, я не прошу мнений, я просто хочу знать, хорошая это практика или нет. Потому что в большинстве руководств YouTube об этом не упоминается, а вместо этого используется скрытое поле формы.
Вы можете использовать токен аутентификации и не помещать его в заголовок файла cookie. Логичное место — заголовок Authorization
. Это больше не токен CSRF, но он, безусловно, является хорошей аутентификацией и часто используется различными API.
Есть некоторые компромиссы в области безопасности. Одним из преимуществ использования файла cookie является то, что вы можете пометить его как «HTTPOnly», что делает его невидимым для Javascript.
Обычно я бы рекомендовал взглянуть на такой стандарт, как OAuth2, вместо того, чтобы делать что-то с нуля самостоятельно.
Для близких избирателей: ОП может меня здесь поправить, но я думаю, что ОП не ищет мнений/советов, а скорее спрашивает, небезопасна ли эта практика.