Jaka jest różnica podczas używania GETlub POSTmetody? Który jest bezpieczniejszy? Jakie są (nie) zalety każdego z nich?
( podobne pytanie )
Jaka jest różnica podczas używania GETlub POSTmetody? Który jest bezpieczniejszy? Jakie są (nie) zalety każdego z nich?
( podobne pytanie )
Odpowiedzi:
To nie jest kwestia bezpieczeństwa. Protokół HTTP definiuje żądania typu GET jako idempotentne , podczas gdy testy POST mogą mieć skutki uboczne. W prostym języku angielskim oznacza to, że GET służy do przeglądania czegoś, bez zmiany, podczas gdy POST służy do zmiany czegoś. Na przykład strona wyszukiwania powinna używać GET, a formularz zmieniający hasło powinien używać POST.
Zauważ też, że PHP trochę myli pojęcia. Żądanie POST pobiera dane wejściowe z ciągu zapytania i za pośrednictwem treści żądania. Żądanie GET po prostu pobiera dane wejściowe z ciągu zapytania. Zatem żądanie POST jest nadzbiorem żądania GET; możesz użyć $_GETw żądaniu POST, a nawet może mieć sens posiadanie parametrów o tej samej nazwie $_POSTi $_GEToznaczających różne rzeczy.
Załóżmy na przykład, że masz formularz do edytowania artykułu. Identyfikator artykułu może znajdować się w ciągu zapytania (a więc dostępny przez $_GET['id']), ale powiedzmy, że chcesz zmienić identyfikator artykułu. Nowy identyfikator może być wtedy obecny w treści żądania ( $_POST['id']). OK, może nie jest to najlepszy przykład, ale mam nadzieję, że ilustruje różnicę między nimi.
Gdy użytkownik wprowadza informacje w formularzu i klika przycisk Prześlij, są dwa sposoby przesłania informacji z przeglądarki na serwer: w adresie URL lub w treści żądania HTTP.
Metoda GET, która została użyta w poprzednim przykładzie, dołącza pary nazwa / wartość do adresu URL. Niestety długość adresu URL jest ograniczona, więc ta metoda działa tylko wtedy, gdy jest tylko kilka parametrów. Adres URL może zostać obcięty, jeśli formularz używa dużej liczby parametrów lub jeśli parametry zawierają duże ilości danych. Ponadto parametry przekazane na adres URL są widoczne w polu adresu przeglądarki, nie jest to najlepsze miejsce do wyświetlenia hasła.
Alternatywą dla metody GET jest metoda POST. Ta metoda pakuje pary nazwa / wartość w treści żądania HTTP, co zapewnia czystszy adres URL i nie nakłada żadnych ograniczeń wielkości na dane wyjściowe formularzy. Jest to również bardziej bezpieczne.
Najlepsza odpowiedź była pierwsza.
Ty używasz:
GETdoskonale nadaje się również do „wysyłania” danych, więc nie jest to bardzo dokładna odpowiedź.
Istnieją dwa wspólne implikacje związane z „bezpieczeństwem” GET. Ponieważ dane pojawiają się w ciągu adresu URL, możliwe, że ktoś spoglądający przez ramię na pasek adresu / adres URL może zobaczyć coś, czego nie powinni mieć dostępu, np. Sesyjny plik cookie, który może potencjalnie zostać wykorzystany do przejęcia sesji. Pamiętaj, że każdy ma telefony z aparatem.
Druga implikacja bezpieczeństwo GETma do czynienia ze GETzmiennymi są rejestrowane na większości serwerów internetowych dziennika dostępu jako część wnioskującego URL. W zależności od sytuacji, klimatu regulacyjnego i ogólnej wrażliwości danych może to potencjalnie budzić obawy.
Niektórzy klienci / zapory ogniowe / systemy IDS mogą marszczyć brwi na GETżądanie zawierające nadmierną ilość danych i dlatego mogą dawać niewiarygodne wyniki.
POST obsługuje zaawansowane funkcje, takie jak obsługa wieloczęściowego wejścia binarnego używanego do przesyłania plików na serwery sieciowe.
POSTwymaga nagłówka o długości treści, który może zwiększyć złożoność implementacji klienta specyficznej dla aplikacji, ponieważ wielkość przekazywanych danych musi być znana z góry, aby zapobiec utworzeniu żądania klienta w trybie przyrostowym z pojedynczym przejściem. Być może drobny problem dla tych, którzy wybierają nadużycie HTTP, używając go jako transportu RPC (Remote Procedural Call).
Inni już wykonali dobrą robotę, pokrywając różnice semantyczne i część „kiedy” tego pytania.
Używam GET podczas pobierania informacji z adresu URL i POST podczas wysyłania informacji do adresu URL.
Powinieneś używać POST, jeśli jest dużo danych lub rodzaj poufnych informacji (naprawdę wrażliwe rzeczy również wymagają bezpiecznego połączenia).
Użyj GET, jeśli chcesz, aby użytkownicy mogli dodawać zakładki do zakładek, ponieważ wszystkie dane są dołączone do zakładki.
Uważaj tylko na osoby, które uderzają w REFRESH metodą GET, ponieważ dane będą wysyłane ponownie za każdym razem bez ostrzeżenia użytkownika (POST czasami ostrzega użytkownika przed ponownym wysłaniem danych).
Ten dokument W3C wyjaśnia użycie HTTP GET i POST.
Myślę, że to wiarygodne źródło.
Podsumowanie jest (sekcja 1.3 dokumentu):
- Użyj GET, jeśli interakcja jest bardziej jak pytanie (tj. Jest bezpieczną operacją, taką jak zapytanie, operacja odczytu lub wyszukiwanie).
- Użyj POST, jeśli:
- Interakcja jest bardziej jak zamówienie lub
- Interakcja zmienia stan zasobu w sposób, który użytkownik postrzega (np. Subskrypcja usługi) lub
- Użytkownik ponosi odpowiedzialność za wyniki interakcji.
Metody pobierania i wysyłania nie mają nic wspólnego z używaną technologią serwerową, działa tak samo w php, asp.net lub ruby. GET i POST są częścią protokołu HTTP. Jak zaznaczono, POST jest bezpieczniejszy. Formularze POST również nie są buforowane przez przeglądarkę. POST służy również do przesyłania dużych ilości danych.
Powód używania testu POST podczas wprowadzania zmian w danych:
Nie umieszczaj też poufnych informacji w ciągu zapytania (tylko opcja z GET), ponieważ pojawia się w pasku adresu, zakładkach i dziennikach serwera.
Mam nadzieję, że wyjaśnia to, dlaczego ludzie twierdzą, że test POST jest „bezpieczny”. Jeśli przesyłasz poufne dane, musisz użyć protokołu SSL.
GETi POSTsą metodami HTTP, które mogą osiągnąć podobne cele
GETjest w zasadzie tylko do pobierania (pobierania) danych, A GETnie powinien mieć treści, więc oprócz plików cookie jedynym miejscem do przekazywania informacji jest adres URL, a adresy URL mają ograniczoną długość, GETjest mniej bezpieczne w porównaniu z tym, POSTże wysyłane dane są częścią adres URL
Nigdy nie używaj GETprzy wysyłaniu haseł, karty kredytowej lub innych poufnych informacji !, Dane są widoczne dla wszystkich w adresie URL, Mogą być buforowane dane.
GETjest nieszkodliwy, gdy przeładowujemy lub oddzwaniamy przycisk, będzie oznaczony książką, parametry pozostaną w historii przeglądarki, dozwolone są tylko znaki ASCII.
POSTmoże obejmować dowolne czynności, takie jak przechowywanie lub aktualizowanie danych, zamawianie produktu lub wysyłanie wiadomości e-mail. POSTmetoda ma ciało.
POSTmetoda jest zabezpieczona do przekazywania poufnych i poufnych informacji do serwera, nie będzie widoczna w parametrach zapytania w adresie URL, a parametry nie zostaną zapisane w historii przeglądarki. Nie ma ograniczeń dotyczących długości danych. Podczas ponownego ładowania przeglądarka powinna ostrzec użytkownika, że dane zostaną ponownie przesłane. POSTmetody nie można dodać do zakładek
Użyj metody GET, jeśli chcesz odzyskać zasoby z adresu URL. Zawsze możesz zobaczyć ostatnią stronę, jeśli naciśniesz przycisk Wstecz przeglądarki, i można ją dodać do zakładek, więc nie jest tak bezpieczna jak metoda POST.
Użyj metody POST, jeśli chcesz „przesłać” coś do adresu URL. Na przykład chcesz utworzyć konto Google i może być konieczne wypełnienie wszystkich szczegółowych informacji, a następnie kliknięcie przycisku „prześlij” (tutaj wywoływana jest metoda POST), po pomyślnym przesłaniu i próba naciśnięcia przycisku Wstecz w przeglądarce , zamiast ostatniej strony z wypełnionym formularzem pojawi się błąd lub nowy pusty formularz.
GETMetoda:
Służy tylko do wysłania daty 256 znaków
Podczas korzystania z tej metody informacje można zobaczyć w przeglądarce
Jest to domyślna metoda stosowana przez formularze
To nie jest tak zabezpieczone.
POSTMetoda:
Służy do wysyłania nieograniczonej ilości danych.
Dzięki tej metodzie informacji nie można wyświetlić w przeglądarce
Możesz wyraźnie wspomnieć o POSTmetodzie
Jest bardziej zabezpieczony niż GETmetoda
Zapewnia bardziej zaawansowane funkcje