2009-08-16 9 views
11

W tej chwili ponownie uwzględniam jedną z moich aplikacji internetowych i miałem nadzieję na porady dotyczące poprawy mojego bezpieczeństwa.Zabezpieczanie uwierzytelniania opartego na plikach cookie

Będę pamiętać, że aplikacja jest w ASP.net, a obecna implementacja uniemożliwia mi korzystanie ze zintegrowanego uwierzytelniania. Nie jest to również aplikacja, która wymaga wysokiego poziomu bezpieczeństwa, po prostu lubię objąć moje bazy.

W przeszłości zapisałem identyfikator i token. Token to skrót nazwy użytkownika + sól użytkownika (ponowne wykorzystanie wartości z informacji o autorze) Gdy użytkownik odwiedza witrynę, identyfikator jest sprawdzany na podstawie tokena i automatycznie uwierzytelniany.

Wydaje mi się, że jest tu wielka dziura. Teoretycznie, jeśli ktoś dostanie wartość solą, wszystko, co trzeba zrobić, to odgadnąć algorytm mieszania i przeglądać możliwe identyfikatory, dopóki nie wejdą. Nie spodziewam się, że tak się stanie, ale nadal wydaje się błędem .

Wszelkie porady dotyczące prawidłowego potwierdzenia, że ​​pliki cookie użytkownika nie zostały zmienione?

+0

Dodam, że częścią tego, co mnie martwi, jest to, że jeśli ktoś uzyskałby wartości soli i skróty haseł do strony, to nie zrobiłoby to nic dobrego z czystym uwierzytelnianiem hasłem. Wydaje mi się, że dobra metoda uwierzytelniania plików cookie działałaby w podobny sposób. –

Odpowiedz

10

Sposób większość witryn internetowych zrobić to w celu uwierzytelnienia użyj i jeśli się powiedzie, wyśle ​​przeglądarce plik cookie do przechowywania i wysyłania kolejnych żądań. Jeśli osoba atakująca zdołała zdobyć token (zanim wygasła), będzie mogła podszyć się pod użytkownika.

Z tego powodu proces cookie i uwierzytelniania powinien zawsze odbywać się w sesji https. Jedynym realistycznym sposobem, w jaki osoba atakująca musi zdobyć plik cookie, jest przechwycenie go na komputerze użytkownika końcowego, a jeśli jest to możliwe, prawdopodobnie zainstaluje rejestrator naciśnięć klawiszy i otrzyma mimo to hasło użytkownika.

Odnośnie do tego, jakiego tokena użyć, nie ma znaczenia, o ile jest wystarczająco pseudolosowy, aby uczynić go kosztownym pod względem obliczeniowym, aby osoba atakująca mogła odgadnąć. Ja sam używam identyfikatorów GUID. jeśli potrzebujesz dodatkowych informacji w ciasteczku, oprócz samego sessionid, możesz dodać GUID do niego, a następnie prawdopodobnie zaszyfrować lub zaszyfrować go tylko dla pasa i aparatów ortodontycznych.

+0

Podczas korzystania z uwierzytelniania plików cookie należy zachować ostrożność w przypadku fałszowania skryptów między witrynami (CRSF). Przeglądarka wysyła dane uwierzytelniające w imieniu użytkownika i można oszukać przeglądarkę, wysyłając ją także atakującemu. Ale można tego uniknąć/zminimalizować za pomocą jednorazówki. Google to dla więcej informacji. – thebiggestlebowski

2

dwa sposoby:

  1. szyfruje je z symetrycznym algorytmem (AES).

Jest to dobre, ponieważ umożliwia odszyfrowanie; ale można argumentować, że nie trzeba go odszyfrowywać (w zależności od tego, co jeszcze tam przechowujesz).

  1. Hash i Podpis go. Znów używa klucza prywatnego, więc nawet jeśli ktoś zna dokładną zawartość, nie może odtworzyć hasza, ponieważ potrzebuje klucza prywatnego.

Prawdopodobnie (i poprzednio) skorzystałem z opcji # 1.

0

dlaczego nie tylko przechowywać skrót w pliku cookie, czy jakikolwiek inny numer pseudolosowy? Następnie sprawdź w bazie danych, aby uzyskać identyfikator użytkownika.

innymi: tylko zrobić http cookies, czyli nie można ustawić za pomocą javascript Jeśli jest to opcja, sprawiają, że być przekazywane wyłącznie z danymi https

4

Najlepszym sposobem jest zapisanie identyfikatora sesji jako wartości cookie.

Za każdym razem, gdy użytkownik się loguje, tworzy się rekord w bazie danych lub w innym magazynie sesji z losowym identyfikatorem sesji. Umieść identyfikator w pliku cookie. Kiedy zobaczysz ciasteczko później, możesz pobrać wszystkie informacje o użytkowniku z bazy danych.

Takie podejście ma następujące zalety,

  1. To bardzo bezpieczna. Identyfikator sesji jest po prostu liczbą losową. Nie musisz się martwić o skompromitowany klucz lub sól.
  2. Plik cookie można łatwo odwołać z serwera. Wszystko, co musisz zrobić, to usunąć rekord sesji i sprawić, że ID będzie bezużyteczny.
  3. Wartość cookie może być naprawdę krótka.

Jeśli to nie działa, spróbuj użyć szyfrowania. Hash byłby moim ostatnim wyborem. Hash samo w sobie jest bezużyteczne. Musisz wyraźnie zapisać identyfikator użytkownika i inne informacje w innym pliku cookie. W efekcie ujawniłeś informacje o użytkowniku.

+1

zz koder: podczas gdy to prawda, musisz ujawnić identyfikator użytkownika, jeśli go masz; generalnie nie jest krytyczny, więc nie ma problemu z jego ujawnieniem. Podejście Session ID jest w porządku, ale, jak mówisz, musi zapisać coś w DB. Może to nie być pożądane, jeśli chodzi o informacje, które muszą żyć przez dłuższy czas. –

Powiązane problemy