2011-02-23 19 views
6

Przeczytałem wiele rzeczy na temat uwierzytelniania w CouchDB, szczególnie w odniesieniu do uwierzytelniania plików cookie. mam jeszcze co kilka testów i wszystko wydaje się działa dobrze, na przykład z tym poleceniem:Uwierzytelnianie CouchDB

curl -vX POST $ HOST/_SESSION -H 'application/x-www-form-urlencoded' -d ' name = foo & hasło = bar "

Dostaję plik cookie, którego mogę użyć. Ale chodzi o to, że zawsze, gdy widzę rodzaj próbki w Internecie, nazwa użytkownika i hasło są zawsze wysyłane w postaci zwykłego tekstu.

Jestem naprawdę nowy w kwestii bezpieczeństwa, ale co jest przedmiotem zainteresowania metody Cookie Auth, jeśli najpierw muszę wysłać moje dane uwierzytelniające w sposób jasny?

Czy istnieje sposób wysłania co najmniej skrótu hasła? z czymś takim IDK:

curl -vX POST $ HOST/_SESSION -H 'application/x-www-form-urlencoded' -d 'name = foo & hashed_password = hashed_bar'

Cheers

Arnaud

Odpowiedz

11

Jeśli wyślesz swoje hasło zakodowane niż wszyscy atakujący musi znać to zakodowane hasło, więc nie byłoby rozwiązać problem wysyłania hasła w postaci zwykłego tekstu - teraz byś ha ve problem z wysłaniem twojego hasha w postaci zwykłego tekstu.

Pamiętaj też, że nawet jeśli to rozwiąże problem, nadal będziesz wysyłać plik cookie w postaci zwykłego tekstu, który jest podatny na przechwytywanie sesji.

(Istnieje również HTTP uwierzytelniania szyfrowanego dostępu, ale nie bez własnych problemów. - ale CouchDB nie wspierać ją ostatni raz sprawdzałem tak)

Co należy zrobić, aby zawsze używać HTTPS dla każdego uwierzytelnionego CouchDB dostęp z dowolną zaangażowaną siecią, z wyjątkiem może sieci 127.0.0.0.

(I tak, prawie wszystkie przykłady w sieci i w książkach pokaż stosując podstawową lub plik cookie uwierzytelniania za pośrednictwem protokołu HTTP, który moim zdaniem jest katastrofa czeka się stało.)

+0

Dziękuję, więc używam HTTPS i dla małych aplikacji, w których bezpieczeństwo nie jest dużym problemem Chyba zarządzam moimi administratorami baz danych i użytkownikami baz danych (czytnikami), więc referencje administratora serwera nigdy nie są używane to dobre rozwiązanie ? – Arnaud

2

Począwszy od wersji 1.1 , CouchDB, obsługuje dostęp API poprzez HTTPS. Zamiast używać proxy HTTPS, możesz bezpośrednio korzystać z HTTPS, chroniąc hasła przesyłane przez kabel. Zobacz Feature Guide dla wersji 1.1.

2

Używanie Https to właściwa odpowiedź.

Dodam wyjaśnienie na temat znaczenia obliczenia skrótu po stronie serwera. Funkcja mieszania to funkcja jednokierunkowa przekształcająca dane wejściowe na wartość klucza przechowywaną na serwerze. Jeśli ktoś włamie się na serwer i otrzyma zakodowane dane wejściowe (wartość klucza), nie będzie w stanie wydedukować wartości wejściowej, aby podszywać się pod Ciebie.

Jeśli obliczysz wartość klucza po stronie klienta i na serwerze nie zostanie przeprowadzona jednostronna tranformacja, jest to równoważne przechowywaniu haseł w postaci zwykłego tekstu. Ktoś, komu udało się uzyskać kopię wartości klucza przechowywanej na serwerze, może łatwo podszyć się pod Ciebie, wysyłając wartość klucza.

Stosowanie po stronie serwera do zabezpieczania bazy danych haseł wymaga zastosowania kryptograficznie bezpiecznej funkcji jednokierunkowej (tj. Asha6) z solą/losowym nasieniem na zgłoszonym haśle.

Zakażenie wysłanego hasła przez jego skasowanie, oprócz haszowania po stronie serwera, nie pomoże w rozwiązaniu problemu, jeśli wysłana wartość hashowana jest zawsze taka sama. Jednak szpiegowanie danych przesyłanych przez połączenie SSL nie jest banalne.

Istnieje jednak znacząca korzyść z hashowania hasła po stronie klienta. Atak brute force na serwerze, próbując odgadnąć hasło za pomocą popularnego słownika hasłowego, stałby się beznadziejny, ponieważ hashowanie po stronie klienta randomizowało hasło.

Możemy dodać sól do skrótu, aby zabezpieczyć się przed używaniem hashowanego słownika haseł. Kiedy użytkownik wpisze swój identyfikator użytkownika, poproś o podanie konkretnej wartości soli dla serwera. Następnie użyj zwróconej wartości salt lub hash, aby wygenerować hashowane hasło po stronie klienta.

Brutalne wymuszanie hasła może być utrudnione po stronie serwera przez zwiększenie odstępu czasu między ponownymi próbami. Ale na ogół działa to dla jednego konkretnego połączenia. Atakujący może połączyć się ponownie po każdych dwóch próbach. Następnie wymagane jest śledzenie adresów IP w celu rozpoznania tego typu ataków.