Причина в том, что обычные запросы ajax (с использованием XHR) ограничены той же политикой происхождения . Таким образом, это означает, что для того, чтобы это работало, вам сначала необходимо использовать уязвимость XSS, прежде чем вы сможете выполнить уязвимость CSRF.
Теперь может показаться, что JSONP может быть способом обойти это. Но это не так. Поскольку JSONP использует теги сценария, результат запроса будет передан сразу. А поскольку результатом является HTML, а не JS, синтаксическая ошибка должна выдать .
Таким образом, не должно быть способа получить токен без предварительной компрометации самого сайта. Но следует отметить две вещи, которые зависят от:
Все браузеры корректно реализуют одинаковую защиту политики происхождения
Вы не передаете токен в форму через JSON (поскольку, если бы вы были, JSONP мог бы прочитать его).