2009-05-06 22 views
28

Mój kolega i ja odbyliśmy wczoraj gorącą debatę, czy można bezpiecznie przesłać dane logowania za pomocą parametrów adresu URL jako sposobu uwierzytelniania. Poprawnie wskazał, że HTTPS szyfruje wszystkie znaki spoza hosta/portu w adresie URL przed wysłaniem żądania po stronie serwera.Czy nazwa użytkownika i hasło mogą być bezpiecznie przesyłane przez HTTPS przez parametry URL?

Jednak nadal uważam, że istnieją przypadki krawędzi tutaj gdzie jest to możliwe, aby ukraść tych poświadczeń i wierzą powinny one być wysyłane za pośrednictwem HTTPS POST. Czy w rzeczywistości jest to bezpieczny sposób wysyłania danych logowania/tokena?

+1

Czy chodziło Ci o SSL, a nie SSH? – Greg

+0

SSH nie ma sensu. Protokół SSL można używać w kontekstach innych niż HTTPS, ale jest wystarczająco blisko. – MSalters

+0

Tak, chodzi mi o HTTPS, a nie SSL. Poprawiłem tytuł. –

Odpowiedz

37

Żądany URL może pokazać się w logów serwera WWW i historii przeglądarki/zakładki który nie jest dobrą rzeczą.

+0

Jeśli para nazwa użytkownika-hasło jest raz używać (np. OTP), jest to całkowicie bezpieczny schemat wysyłania ich za pośrednictwem adresu URL. Więcej informacji @ http://stackoverflow.com/q/4833314/632951 – Pacerier

5

Bezpiecznie jest wielkim słowem. SSH uniemożliwi innym użytkownikom pobieranie go, ale czy naprawdę chcesz pokazać czyjeś hasło w querystringu. A co z kolesiem stojącym nad ramieniem użytkowników? A co z iniekcją SQL? Naprawdę zły pomysł, przynajmniej schowaj go w formularzu.

4

nie miałem pojęcia, że ​​HTTPS zaszyfrowany adres URL, jak również, że dobrze jest wiedzieć.

Jednak z punktu widzenia bezpieczeństwa, byłbym bardziej przeszkadza fakt, że poświadczenia mogą być odczytywane w pasku adresu. Nie wspominając o prawdopodobnie zapisanych w historii przeglądarki.

8

Jeśli chodzi o przekazywanie poświadczeń chodzi, że ma rację. Ale jest wiele innych rzeczy do rozważenia, takich jak historia brwser, logi serwera, użytkownicy oglądający ekran itp., Które byłyby w tym przypadku ryzykiem.

26

wziąć dodatkowy krok, jeśli masz bazę danych typu back-end. Prześlij nazwę użytkownika i hasło za pośrednictwem postu formularza, poproś o to, aby twój back-end zwrócił token (będzie to robił guid), zapisz token do tabeli bazy danych i przypisz czas wygaśnięcia, a następnie użyj tego tokena w zapytaniu zamiast poświadczeń . Teraz twój system będzie bardzo bezpieczny, a ty masz unikalny identyfikator sesji jako plus.

+8

+1 Za dostarczenie rozwiązania, a nie tylko odpowiedzi. –

+0

Dlaczego więc nie OAuth? – Victor

1

Jest też inne rozwiązanie, które staram. Możesz używać programów obsługi PHP dla sesji, do przechowywania danych sesji bezpośrednio do Twojej bazy danych w prosty sposób za pomocą procedur obsługi. Potrzebna będzie tabela sesji w twoim DB z czasem wygaśnięcia. Po wysłaniu danych logowania HTTPS, jeśli jest to poprawne, możesz zapisać je w zmiennej $ _SESSION, a jeśli dobrze zrobiłeś interfejs, przejdzie on do twojego DB. Ponieważ nie jest to ujawnione poza PHP, będziesz mieć solidny system logowania, aw plikach cookie klienta jest przechowywany TYLKO identyfikator sesji, a nie tokeny, konto lub inne poufne dane.

Numer referencyjny: http://es.php.net/manual/en/function.session-set-save-handler.php

Powiązane problemy