Jaka jest różnica podczas używania GET
lub POST
metody? Który jest bezpieczniejszy? Jakie są (nie) zalety każdego z nich?
( podobne pytanie )
Jaka jest różnica podczas używania GET
lub POST
metody? 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ć $_GET
w żądaniu POST, a nawet może mieć sens posiadanie parametrów o tej samej nazwie $_POST
i $_GET
oznaczają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:
GET
doskonale 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 GET
ma do czynienia ze GET
zmiennymi 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.
POST
wymaga 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.
GET
i POST
są metodami HTTP, które mogą osiągnąć podobne cele
GET
jest w zasadzie tylko do pobierania (pobierania) danych, A GET
nie 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ść, GET
jest mniej bezpieczne w porównaniu z tym, POST
że wysyłane dane są częścią adres URL
Nigdy nie używaj GET
przy wysyłaniu haseł, karty kredytowej lub innych poufnych informacji !, Dane są widoczne dla wszystkich w adresie URL, Mogą być buforowane dane.
GET
jest nieszkodliwy, gdy przeładowujemy lub oddzwaniamy przycisk, będzie oznaczony książką, parametry pozostaną w historii przeglądarki, dozwolone są tylko znaki ASCII.
POST
może obejmować dowolne czynności, takie jak przechowywanie lub aktualizowanie danych, zamawianie produktu lub wysyłanie wiadomości e-mail. POST
metoda ma ciało.
POST
metoda 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. POST
metody 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.
GET
Metoda:
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.
POST
Metoda:
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 POST
metodzie
Jest bardziej zabezpieczony niż GET
metoda
Zapewnia bardziej zaawansowane funkcje