JQuery i inne frameworki dodają następujący nagłówek:
X-Requested-With: XMLHttpRequest
Dlaczego jest to potrzebne? Dlaczego serwer miałby traktować żądania AJAX inaczej niż zwykłe żądania?
AKTUALIZACJA : Właśnie znalazłem przykład z życia przy użyciu tego nagłówka: https://core.spreedly.com/manual/payment-methods/adding-with-js . Jeśli procesor płatności jest wymagany bez AJAX, po zakończeniu przekierowuje z powrotem do oryginalnej strony internetowej. Na żądanie AJAX nie następuje przekierowanie.
jquery
ajax
http-headers
cors
Gili
źródło
źródło
Odpowiedzi:
Dobry powód to bezpieczeństwo - może to zapobiec atakom CSRF, ponieważ tego nagłówka nie można dodać do domeny żądania AJAX bez zgody serwera za pośrednictwem CORS .
Dozwolone są tylko następujące nagłówki w wielu domenach:
wszelkie inne powodują wysłanie żądania „przed lotem” w przeglądarkach obsługiwanych przez CORS.
Bez CORS nie można dodać
X-Requested-With
do żądania XHR między domenami.Jeśli serwer sprawdza, czy ten nagłówek jest obecny, wie, że żądanie nie zostało zainicjowane przez domenę atakującego próbującego wysłać żądanie w imieniu użytkownika za pomocą JavaScript. Sprawdza to również, czy żądanie nie zostało wysłane z POST ze zwykłego formularza HTML, którego trudniej jest zweryfikować, czy nie jest domeną międzydomenową bez użycia tokenów. (Jednak sprawdzenie
Origin
nagłówka może być opcją w obsługiwanych przeglądarkach, chociaż stare przeglądarki pozostaną podatne na ataki ).Wykryto nowe obejście Flash
Możesz połączyć to z tokenem , ponieważ Flash działający w Safari na OSX może ustawić ten nagłówek, jeśli istnieje krok przekierowania . Wygląda na to, że działał również w Chrome , ale teraz został naprawiony. Więcej informacji tutaj, w tym różne wersje, których dotyczy problem.
OWASP Polecam połączenie tego z sprawdzeniem pochodzenia i referencji :
Jednak z powodów już omówionych sprawdzanie pochodzenia może być trudne.
Aktualizacja
Napisał bardziej szczegółowy post na blogu na temat CORS, CSRF i X-Requested-With tutaj .
źródło
X-Requested-With
nagłówka?Upewnij się, że przeczytałeś odpowiedź SilverlightFox. Podkreśla ważniejszy powód.
Powodem jest głównie to, że jeśli znasz źródło żądania, możesz je nieco dostosować.
Załóżmy na przykład, że masz witrynę internetową z wieloma przepisami. I używasz niestandardowej struktury jQuery, aby wsuwać przepisy do pojemnika na podstawie klikniętego łącza. Link może być
www.example.com/recipe/apple_pie
Teraz zwykle zwraca całą stronę, nagłówek, stopkę, treść przepisu i reklamy. Ale jeśli ktoś przegląda Twoją witrynę, niektóre z tych części są już załadowane. Możesz więc użyć AJAX, aby uzyskać przepis wybrany przez użytkownika, ale aby zaoszczędzić czas i przepustowość, nie ładuj nagłówka / stopki / reklam.
Teraz możesz po prostu napisać dodatkowy punkt końcowy dla danych, takich jak,
www.example.com/recipe_only/apple_pie
ale trudniej je utrzymać i udostępnić innym osobom.Ale łatwiej jest po prostu wykryć, że jest to zapytanie ajaxowe składające żądanie, a następnie zwracające tylko część danych. W ten sposób użytkownik marnuje mniejszą przepustowość, a strona wydaje się bardziej responsywna.
Frameworki po prostu dodają nagłówek, ponieważ niektórzy mogą uznać za przydatne śledzenie, które żądania są ajaxowe, a które nie. Ale korzystanie z takich technik jest całkowicie zależne od programisty.
W rzeczywistości przypomina trochę
Accept-Language
nagłówek. Przeglądarka może poprosić o stronę internetową. Pokaż mi rosyjską wersję tej strony bez konieczności wstawiania / ru / lub podobnego adresu URL.źródło
Accept
nagłówku. Użycie do tego niestandardowego nagłówka wydaje się niewłaściwą drogą.Niektóre frameworki używają tego nagłówka do wykrywania żądań xhr, np. Grails Spring Security używa tego nagłówka do identyfikowania żądania xhr i udziela odpowiedzi json lub html jako odpowiedzi.
Źródło: http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html
źródło