Скажите, если я ошибаюсь.
JWT используется для авторизации / аутентификации действий пользователя (с API для примера).
Для предотвращения XSS JWT должен быть сгенерирован как серверный ie на стороне сервера с помощью HttpOnly / Secure.
Для смягчения CSRF JWT должен включать сгенерированный на стороне сервера токен xsrf внутри JWT.
Затем сервер отправьте Set-Cook ie со свойством JWT со свойством Samesite и XSRF-TOKEN в заголовке ответа HTTP.
Затем клиент должен сохранить XSRF-TOKEN в качестве стороны файла cookie / сеанса.
При каждом запросе клиент автоматически отправляет JWT и устанавливает XSRF-TOKEN cook ie в качестве заголовка запроса.
Теперь сервер может сначала проверить JWT, извлечь XSRF и сравнить с XSRF. в заголовке? Правильно?
Теперь, если у меня есть приложение React с маршрутом создания для примера элемента: /createItem.
Представьте, что компонент, отвечающий за это создание, автоматически отправляет данные API stati c.
Нет форм, нет кнопки для создания ...
API для создания принимает тело в запросе POST, например:
{
"name": "Draft",
"description": "description"
}
Я предполагаю, что могу использовать CSRF с такой фрагмент, как:
<form action="https://mywebsite.com/createItem">
<input type="submit"/>
</form>
<script>
document.forms[0].submit();
</script>
То есть злоумышленник может отправить эту форму и заставить пользователя создавать новые элементы? Правильно?
Как я могу предотвратить эту атаку?
Нужно ли использовать формы? Со скрытым полем ввода csrf?
Потому что в моем приложении я хотел позволить userx создавать элемент без указания c данных.
Клиент автоматически создает элемент с сгенерированным именем и пустым описанием ...
Но это выглядит неправильно?