CSRF генерируется на сервере и отображается на странице в форме скрытым полем input.
Юзер заполняет форму и отправлет на сервер. PHP-скрипт сравнивает метку csrf с той что в сессии - всё ок, выполняем запрос, возвращаем результат.
Главное: ответ возвращается на страницу без её перезагрузки бекендом, значит csrf-метка остаётся той же самой, значит теперь пока сессия не кончится можно отправлять любое количество запросов и все они будут выполняться.
Как этого избежать?