Почему токен XSRF не пересылается из разных источников?

Это фрагмент файла http.js в Angularjs 1.6.4 на github:

var xsrfValue = urlIsSameOrigin(config.url)
    ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName]
    : undefined;
if (xsrfValue) {
    reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
}

Почему токен XSRF включен только в том случае, если запрос предназначен для того же источника? Что, если серверная часть Restful находится на другом хосте, чем интерфейс, не следует ли тем не менее использовать XSRF?


person Alon Segal    schedule 22.05.2017    source источник


Ответы (1)


Защита XSRF в этом случае работает путем сравнения токена, полученного в заголовке config.xsrfHeaderName, с токеном, полученным в виде файла cookie config.xsrfCookieName (см. Защиту от xsrf "двойной отправкой"). В любом случае cookie не будет отправлен в другие источники, поэтому нет смысла отправлять заголовок.

В этом случае другой источник предположительно использует аутентификацию, которая не полагается на что-то, автоматически добавляемое к запросам браузером (например, файлы cookie), но, вероятно, основывается на токене, как и большинство API-интерфейсов. В этом случае он не уязвим для xsrf.

person Gabor Lengyel    schedule 23.05.2017