2011-02-08 4 views
5

Czytam, że sprawdzenie nagłówka X żądania ajax jest dobrym sposobem, aby upewnić się, że żądanie nie pochodzi z zewnątrz. Po stronie serwera, jak mogę sprawdzić ten nagłówek? i jaki jest właściwy sposób reagowania na ten nagłówek, którego brakuje lub jest on nieprawidłowy (przekierowanie, odrzucenie wyjątku, inaczej)?W jaki sposób serwer może sprawdzać żądania ajaxowe nie z witryny, X-Requested-With

+4

Możecie zajrzeć do http://stackoverflow.com/questions/623299/can-the-x-requested-with-http-header-be-spoofed; pokazuje, że 'X-Requested-With' może zostać sfałszowany. –

+0

chcesz zobaczyć również http://www.yiiframework.com/forum/index.php?/topic/4945-yiiapp-request-isajaxrequest/ –

Odpowiedz

8

Można sprawdzić to w ten sposób ...

$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND 
      strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'; 

Jeśli jesteś tylko spodziewa dostęp poprzez XHR, a potem po prostu exit jeśli ten nagłówek nie jest obecny.

Uwaga: Ten nagłówek jest banalny do podszywania się. Nie polegaj na tym dla niczego poza wygląda na to, że pochodzi z XHR.

+0

Chcę go użyć, aby upewnić się, że żądanie nie nadchodzi od kogoś, kto spojrzał na mój kod js, wziął adresy URL i przesyła dane wejściowe spoza mojej strony. Więc jeśli można to sfałszować, to nie ma sposobu, aby się przed tym uchronić? – zmol

+0

@zmol Przepraszam, nie ma sposobu, aby po prostu znaleźć obecność tego nagłówka. – alex

+0

, ale czy są inne sposoby? To nie musi być przez ten nagłówek. Ostatecznym celem jest upewnienie się, że prośba nie pochodzi od kogoś, kto czyta kod js, czyta linka URL ajax i odtwarza URL z zewnątrz :) – zmol

6

Jedyny pewny sposób na zapewnienie, że żądanie pochodzi z Twojej witryny, a nie od kogoś innego, to wydanie unikalnego tokena dla użytkownika i zapisanie go w sesji. W kodzie, w którym tworzysz żądanie AJAX, musisz przekazać token z powrotem i jeśli jest zgodny z tym w sesji, możesz mieć pewność, że żądanie pochodzi z Twojej witryny.

Więcej informacji: http://en.wikipedia.org/wiki/Cross-site_request_forgery

Powiązane problemy