В чем смысл заголовка X-Requested-With?



jQuery и другие фреймворки добавляют следующий заголовок:




X-Requested-With: XMLHttpRequest




зачем это нужно? Почему сервер хочет обрабатывать запросы AJAX иначе, чем обычные запросы?



обновление: Я только что нашел реальный пример, используя этот заголовок:https://core.spreedly.com/manual/payment-methods/adding-with-js. если платежный процессор запрашивается без AJAX, он перенаправляет когда все будет готово, вернитесь на исходный сайт. Когда он запрашивается с помощью AJAX, перенаправление не выполняется.

1063   3  

3 ответов:

хорошая причина для безопасности - это может предотвратить CSRF атаки, потому что этот заголовок не может быть добавлен в перекрестный домен запроса AJAX без согласия сервера через CORS.

только следующие заголовки допускаются через домен:

  • принимать
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type

любые другие вызывают запрос "pre-flight", который будет выдан в браузерах, поддерживаемых CORS.

без ПДБС это не возможно, чтобы добавить X-Requested-With к запросу XHR кросс-домена.

если сервер проверяет наличие этого заголовка, он знает, что запрос не был инициирован из домена злоумышленника, пытающегося сделать запрос от имени пользователя с помощью JavaScript. Это также проверяет, что запрос не был отправлен из обычной HTML-формы, из которой сложнее проверить, что это не кросс-домен без использования токенов. (Однако, проверка Origin заголовок может быть опция в поддерживаемых браузерах,хотя вы оставите старые браузеры уязвимы.)

обнаружен новый обход вспышки

вы можете пожелать объединить это с маркером, потому что Flash работает на Safari на OSX можно установить этот заголовок, если есть шаг перенаправления. Оказывается он также работал на Chrome, но теперь исправлена. подробнее здесь включая различные версии пострадавших.

OWASP рекомендует сочетать это с проверкой происхождения и референта:

эта техника защиты специально обсуждается в разделе 4.3 Надежная защита от подделки межсайтовых запросов. Однако, обходит эта защита с использованием Flash была задокументирована еще в 2008 году и снова как недавно, в 2015 году Матиасом Карлссон, чтобы использовать недостаток CSRF в Vimeo. Но мы считаем, что Флэш-атака не может подделать происхождение или Заголовки Referer поэтому, проверяя их оба, мы считаем это сочетание проверки должны предотвратить вспышки обойти CSRF атак. (ОТМЕЧАТЬ: Если кто-то может подтвердить или опровергнуть это убеждение, пожалуйста, сообщите нам, чтобы мы можно обновить эту статью)

однако по причинам, уже обсужденным проверка происхождения может быть сложной.

обновление

написал более подробно сообщение в блоге на CORS, CSRF и X-Requested-With here.

убедитесь, что вы прочитали ответ SilverlightFox. Это подчеркивает более важную причину.

причина в основном в том, что если вы знаете источник запроса, вы можете немного настроить его.

например, скажем, у вас есть сайт, который имеет много рецептов. И вы используете пользовательский фреймворк jQuery для перемещения рецептов в контейнер на основе ссылки, которую они нажимают. Ссылка может быть www.example.com/recipe/apple_pie

Теперь нормально, что возвращает полную страницу, верхний и Нижний колонтитулы, содержание рецепта и объявления. Но если кто-то просматривает ваш сайт, некоторые из этих деталей уже загружены. Таким образом, вы можете использовать AJAX, чтобы получить рецепт, выбранный пользователем, но для экономии времени и пропускной способности не загружайте верхний/нижний колонтитул/объявления.

Теперь вы можете просто написать вторичную конечную точку для данных, таких как www.example.com/recipe_only/apple_pie но это труднее поддерживать и делиться с другими людьми.

но легче просто обнаружить, что это запрос ajax, который делает запрос, а затем возвращает только часть данных. Таким образом, пользователь тратит меньше пропускной способности и сайт выглядит более отзывчивым.

фреймворки просто добавляют заголовок, потому что некоторые могут найти полезным отслеживать, какие запросы являются ajax, а какие нет. Но это полностью зависит от разработчика, чтобы использовать такие методы.

это на самом деле похоже на Accept-Language заголовок. Браузер может запросить веб-сайт пожалуйста, покажите мне русскую версию этого сайта без необходимости вставьте /ru/или аналогичный в URL.

некоторые фреймворки используют этот заголовок для обнаружения запросов xhr, например grails spring security использует этот заголовок для идентификации запроса xhr и дает либо ответ json, либо ответ html в качестве ответа.

большинство библиотек Ajax (Prototype, JQuery и Dojo по состоянию на v2.1) включают заголовок X-Requested-With, который указывает, что запрос был сделан XMLHttpRequest вместо того, чтобы быть вызванным щелчком обычной гиперссылки или формы submit кнопка.

Источник: http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html

Comments

    Ничего не найдено.