Czy łańcuch zapytań HTTPS jest bezpieczny?
Tworzę bezpieczne internetowe API, które używa HTTPS; jednak, jeśli pozwolę użytkownikom skonfigurować go (zawierać hasło wysyłania) za pomocą ciągu zapytania, czy to również będzie bezpieczne, czy powinienem wymusić to za pomocą postu?
9 answers
Tak, jest. ale używanie GET dla wrażliwych danych jest złym pomysłem z kilku powodów:
- głównie wyciek http referrer (zewnętrzny obraz na stronie docelowej może wyciekać hasło[1])
- hasło będzie przechowywane w logach serwera (co jest oczywiście złe)
- Pamięć podręczna historii w przeglądarkach
Dlatego, mimo że querystring jest zabezpieczony, nie zaleca się przesyłania poufnych danych przez querystring.
[1] chociaż muszę zauważyć RFC stwierdza, że przeglądarka nie powinna wysyłać referrerów z HTTPS do HTTP. Ale to nie znaczy, że zły pasek narzędzi przeglądarki 3rd party lub zewnętrzny obraz / flash z witryny HTTPS nie wycieknie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-27 17:04:03
Z punktu widzenia "sniff the network packet" żądanie GET jest bezpieczne, ponieważ przeglądarka najpierw ustanowi bezpieczne połączenie, a następnie wyśle żądanie zawierające parametry GET. Ale GET url ' s będą przechowywane w historii przeglądarki użytkowników / autouzupełnianie , co nie jest dobrym miejscem do przechowywania np. danych hasła. Oczywiście ma to zastosowanie tylko wtedy, gdy przyjmiesz szerszą definicję "Webservice", która może uzyskać dostęp do usługi z przeglądarki, jeśli uzyskasz do niej dostęp tylko z niestandardowej aplikacji to nie powinno być problemem.
Więc używanie post przynajmniej dla okien dialogowych haseł powinno być preferowane. Również jak wskazano w linku littlegeek opublikował GET URL jest bardziej prawdopodobne, aby być zapisane w logach serwera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-27 08:38:02
Tak. Cały tekst sesji HTTPS jest zabezpieczony protokołem SSL. Obejmuje to zapytanie i nagłówki. Pod tym względem POST I GET byłyby dokładnie takie same.
Jeśli chodzi o bezpieczeństwo Twojej metody, nie ma prawdziwego sposobu, aby powiedzieć bez odpowiedniej kontroli.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-24 03:42:52
Tak , Twoje ciągi zapytań zostaną zaszyfrowane.
Powodem jest to, że ciągi zapytań są częścią protokołu HTTP
, który jest protokołem warstwy aplikacji, podczas gdy część bezpieczeństwa (SSL/TLS)
pochodzi z warstwy transportowej. Najpierw zostanie ustanowione połączenie SSL
, a następnie parametry zapytania (które należy do protokołu http) zostaną wysłane do serwera.
Podczas ustanawiania połączenia SSL
, twój Klient wywoła następujące kroki w kolejności. Załóżmy, że próbujesz zalogować się na stronę o nazwie example.com {[28] } i chcesz wysłać swoje poświadczenia za pomocą query params . Twój kompletny URL
może wyglądać następująco.
(e.g https://example.com/login?username=alice&password=12345)
-
Przeglądarka / aplikacja mobilna) najpierw rozwiąże nazwę domeny
- teraz twój Klient spróbuje połączyć się z serwerem z adresem
IP
124.21.12.31
i spróbuje połączyć się z portem443
(SSL
Port serwisowy nie jest domyślnymhttp
port80
). - teraz serwer w
example.com
wyśle swoje certyfikaty do twojego klienta. - twój Klient zweryfikuje certyfikaty i rozpocznie wymianę wspólnego tajnego klucza dla twojej sesji.
- Po pomyślnym ustanowieniu bezpiecznego połączenia, tylko parametry zapytania będą wysyłane za pośrednictwem bezpiecznego połączenia.
(example.com)
na adres IP
(124.21.12.31)
za pomocą żądania DNS
. Podczas odpytywania tych informacji używane są tylko informacje dotyczące domeny. ie: tylko example.com
będzie używane.
Dlatego ty nie ujawni poufnych danych. Jednak wysyłanie poświadczeń przez sesję https przy użyciu tej metody nie jest najlepszym sposobem. Powinieneś wybrać inne podejście.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-27 04:51:45
SSL najpierw łączy się z hostem, więc nazwa hosta i numer portu są przesyłane jako czysty tekst. Gdy host odpowie, a wyzwanie powiedzie się, klient zaszyfruje żądanie HTTP za pomocą rzeczywistego adresu URL (tj. czegokolwiek po trzecim ukośniku) i wyśle je do serwera.
Istnieje kilka sposobów na złamanie tego zabezpieczenia.
Możliwe jest skonfigurowanie proxy jako "człowiek w środku". Zasadniczo przeglądarka wysyła żądanie połączenia z rzeczywistym serwerem do Pełnomocnik. Jeśli serwer proxy jest skonfigurowany w ten sposób, połączy się przez SSL z prawdziwym serwerem, ale przeglądarka nadal będzie rozmawiać z serwerem proxy. Jeśli więc atakujący może uzyskać dostęp do serwera proxy, może zobaczyć wszystkie przepływające przez niego dane w wyraźnym tekście.
Twoje żądania będą również widoczne w historii przeglądarki. Użytkownicy mogą pokusić się o dodanie zakładek do strony. Niektórzy użytkownicy mają zainstalowane narzędzia do synchronizacji zakładek, więc hasło może skończyć się na deli.ci.us albo w innym miejscu.
Wreszcie ktoś może włamał się do komputera i zainstalował rejestrator klawiatury lub skrobak ekranu(i wiele wirusów typu koni trojańskich). Ponieważ hasło jest widoczne bezpośrednio na ekranie (w przeciwieństwie do " * " w oknie dialogowym hasła), jest to kolejna luka bezpieczeństwa.
Wniosek: jeśli chodzi o bezpieczeństwo, zawsze polegaj na utartej ścieżce. Jest zbyt wiele rzeczy, o których nie wiesz, o których nie pomyślisz i które skręcą ci kark.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-27 08:45:19
Tak, dopóki nikt nie patrzy ci przez ramię na monitor.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-27 11:17:52
Nie zgadzam się z twierdzeniem o [...] Wyciek http referrer (zewnętrzny obraz na stronie docelowej może wyciekać hasło) w odpowiedzi Slougha .
HTTP 1.1 RFC jawnie stwierdza :
Klienci nie powinni zawierać Referera pole nagłówka w (niezabezpieczonym) HTTP wniosek, jeżeli strona odsyłająca była przesłane bezpiecznym protokołem.
W każdym razie, logi serwera i historia przeglądarki to więcej niż wystarczające powody nie umieszczać poufnych danych w łańcuchu zapytania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:40
Tak, od momentu ustanowienia połączenia HTTPS wszystko jest bezpieczne. Ciąg zapytania (GET) jako POST jest wysyłany przez SSL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-11 13:26:20
Możesz wysłać hasło jako MD5 hash param z dodatkiem soli. Porównaj go po stronie serwera dla auth.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-08 02:00:56