jeśli używasz tego w terminalu, czy masz na myśli, że oba poświadczenia są przechowywane w historii bash?
Francisco Tapia
15
Takie polecenie nie jest bezpieczne, ponieważ inny użytkownik może ps -efsprawdzić, które procesy są uruchomione. Gdy curl -u username:password http://example.compojawi się na liście, miejsce docelowe, nazwa użytkownika i hasło są zagrożone.
Jest to niebezpieczne, ponieważ domyślnym cURL jest podstawowe uwierzytelnianie, w którym protokół HTTP wysyła hasło w postaci zwykłego tekstu. Po określeniu username:passwordciągu zostanie on przekonwertowany na ciąg BASE64 w nagłówku HTTP:
Każdy, kto jest w stanie przechwycić ruch HTTP (twój dostawca, każdy, kto ma dostęp do tego samego bezprzewodowego punktu dostępowego co ty itp.), Będzie mógł odzyskać hasło za pomocą konwertera BASE64 online .
Protokół HTTPS poprawi sytuację, ustanawiając szyfrowane połączenie przed wysłaniem tego nagłówka, zapobiegając ujawnieniu hasła. Ma to jednak zastosowanie tylko wtedy, gdy użytkownik zwraca uwagę na prośbę o potwierdzenie nieznanych certyfikatów, autoryzację wyjątków bezpieczeństwa i tak dalej.
Zauważ, że argumenty poleceń mogą być dostępne dla innych użytkowników na tym samym komputerze, aby zobaczyć np. ps -efSystem plików / proc, twoją historię bashu i twój dziennik terminali (dziękuję za uwagę komentarza @ Lambert). cURL na niektórych platformach próbuje ukryć hasło, więc na przykład ps -efmożesz zobaczyć puste miejsce zamiast hasła. Jednak zamiast przekazywać hasło jako argument wiersza poleceń, lepiej jest poprosić cURL o podanie hasła, jak omówiono w FAQ cURL .
Nawet jeśli jesteś na platformie, na której curl z powodzeniem zastępuje własny argument argv, aby ukryć dane ps, jest pewien okres, w którym zaczyna się, zanim zostanie zastąpione, gdy ta zawartość jest podatna na ataki.
Charles Duffy
Co z uwierzytelnianiem streszczenia? Czy curl domyślnie tego nie używa?
rr
2
@rr Uwierzytelnianie szyfrowane jest tylko nieznacznie lepsze, ponieważ nie zapobiega atakom typu man-in-the-middle, więc nadal lepiej jest używać HTTPS.
Dmitrij Grigoriew
1
@rr Jak twierdzisz, że StartSSL nie jest zaufany przez większość przeglądarek ? Czy spodziewasz się wielu użytkowników Windows 95 lub Firefox 1.5?
Połączenie z odpowiedzią @Dmitry Grigoryev może być najdokładniejsze.
Francisco Tapia
1
Tak, całkowicie przeoczyłem dużą część problemu, który muszę przyznać.
Dmitrij Grigoriew
polecenie może być częścią skryptu, który może odczytać tylko użytkownik ...
Pete
2
@Pete Wiersze poleceń programów wykonawczych (uruchamiane ze skryptu lub z terminala) są zwykle widoczne dla wszystkich użytkowników za pośrednictwem pspolecenia i /procsystemu plików. Jeśli polecenie zakończy się szybko, ryzyko jest zmniejszone, ale nadal istnieje.
RBerteig
2
@Pete Odpowiedzi nie powinny być wyłączne, wzajemnie się uzupełniają. Tak więc w drugiej odpowiedzi można pominąć zagrożenie wyjaśnione w pierwszej, raczej byłoby niepotrzebne powtórzyć ją. I nie nazwałbym tego stwierdzenia fałszywym, ponieważ nie jest to prawda w każdym możliwym przypadku.
Dmitrij Grigoriew
1
Można to zrobić w bezpieczniejszy sposób, używając parametru --netrc-file.
Utwórz plik z uprawnieniem 600
Na przykład: vi / root / my-file
machine example.com
Login nazwa użytkownika
hasło HASŁO
Zapisz i zamknij plik
Użyj poniższego, aby uzyskać dostęp do adresu URL za pomocą nazwy użytkownika i hasła.
Nie jest bezpieczne podczas korzystania ze schematu HTTP. Aby zabezpieczyć go, powinieneś użyć HTTPS.
Aby ukryć hasło przed pojawieniem się w historii poleceń, podaj tylko nazwę użytkownika. Curl poprosi o podanie hasła, jeśli nie zostanie podane w poleceniu.
ps -ef
sprawdzić, które procesy są uruchomione. Gdycurl -u username:password http://example.com
pojawi się na liście, miejsce docelowe, nazwa użytkownika i hasło są zagrożone.Odpowiedzi:
Jest to niebezpieczne, ponieważ domyślnym cURL jest podstawowe uwierzytelnianie, w którym protokół HTTP wysyła hasło w postaci zwykłego tekstu. Po określeniu
username:password
ciągu zostanie on przekonwertowany na ciąg BASE64 w nagłówku HTTP:Każdy, kto jest w stanie przechwycić ruch HTTP (twój dostawca, każdy, kto ma dostęp do tego samego bezprzewodowego punktu dostępowego co ty itp.), Będzie mógł odzyskać hasło za pomocą konwertera BASE64 online .
Protokół HTTPS poprawi sytuację, ustanawiając szyfrowane połączenie przed wysłaniem tego nagłówka, zapobiegając ujawnieniu hasła. Ma to jednak zastosowanie tylko wtedy, gdy użytkownik zwraca uwagę na prośbę o potwierdzenie nieznanych certyfikatów, autoryzację wyjątków bezpieczeństwa i tak dalej.
Zauważ, że argumenty poleceń mogą być dostępne dla innych użytkowników na tym samym komputerze, aby zobaczyć np.
ps -ef
System plików / proc, twoją historię bashu i twój dziennik terminali (dziękuję za uwagę komentarza @ Lambert). cURL na niektórych platformach próbuje ukryć hasło, więc na przykładps -ef
możesz zobaczyć puste miejsce zamiast hasła. Jednak zamiast przekazywać hasło jako argument wiersza poleceń, lepiej jest poprosić cURL o podanie hasła, jak omówiono w FAQ cURL .źródło
ps
, jest pewien okres, w którym zaczyna się, zanim zostanie zastąpione, gdy ta zawartość jest podatna na ataki.To nie jest bezpieczne. Parametry wiersza poleceń są widoczne dla wszystkich użytkowników.
źródło
ps
polecenia i/proc
systemu plików. Jeśli polecenie zakończy się szybko, ryzyko jest zmniejszone, ale nadal istnieje.Można to zrobić w bezpieczniejszy sposób, używając parametru --netrc-file.
Na przykład: vi / root / my-file
machine example.com
Login nazwa użytkownika
hasło HASŁO
Zapisz i zamknij plik
curl --netrc-file / root / my-file http://example.com
źródło
Nie jest bezpieczne podczas korzystania ze schematu HTTP. Aby zabezpieczyć go, powinieneś użyć HTTPS.
Aby ukryć hasło przed pojawieniem się w historii poleceń, podaj tylko nazwę użytkownika. Curl poprosi o podanie hasła, jeśli nie zostanie podane w poleceniu.
źródło
Krótka odpowiedź to nie ... ale ...
Jeśli nie ma opcji po stronie serwera, możesz wzmocnić bezpieczeństwo.
Żadne z nich nie jest mniej bezpieczne niż przeglądarka wykorzystująca HTTP.
źródło