Jakie są najlepsze praktyki dotyczące uwierzytelniania internetowego opartego na plikach cookie?

11

Pracuję nad małym projektem przy użyciu CGI i Pythona (skalowalność nie jest problemem i musi to być BARDZO prosty system).

Myślałem o wdrożeniu uwierzytelniania za pomocą plików cookie i zastanawiałem się, czy istnieją jakieś sprawdzone najlepsze praktyki.

Gdy użytkownik pomyślnie się uwierzytelni, chcę użyć plików cookie, aby dowiedzieć się, kto jest zalogowany. Co, zgodnie z najlepszymi praktykami, powinno być przechowywane w takim pliku cookie?

rdasxy
źródło

Odpowiedzi:

12

Najlepszy przypadek: pojedynczy identyfikator odnoszący się do wszystkich innych potrzebnych informacji, które z kolei są przechowywane w bazie danych.

Są chwile, kiedy sensowne jest umieszczanie tam innych informacji, ale są one rzadkie. Zawsze musisz zadać sobie pytanie, co najmniej pięć razy .

Protokół SSL ochroni Twoich użytkowników przed przejęciem sesji, ale nawet wtedy nigdy nie przechowujesz nieszyfrowanych poufnych informacji w pliku cookie. Zasadniczo jest przechowywany w postaci zwykłego tekstu na dysku twardym.

Co najważniejsze, chroń swojego użytkownika przed atakami XSS i CSRF .

Ochrona XSS jest na ogół tak prosta, jak ostrożność, skoro dołączasz Javascript, ponieważ JavaScript na innym serwerze może zostać zmieniony bez Twojej wiedzy, a ten JavaScript ma dostęp do danych cookie. Jeśli więc używasz sieci dostarczania treści Evil Corp do obsługi skryptu jQuery, mogą oni nagle dodać kod, aby wysłać im pliki cookie użytkowników. Nie wiedziałbyś; Twoi użytkownicy nie wiedzieliby.

Pobieraj skrypty i obsługuj je z własnego serwera lub używaj bardzo zaufanych sieci CDN, takich jak Google lub Yahoo.

Ochrona CSRF jest zwykle wykonywana przez losową wartość w ukrytym polu w formularzu. Wartość jest przechowywana w sesji, dzięki czemu po ponownym przesłaniu formularza można sprawdzić, czy pochodzi on z tego samego komputera.

Większość platform internetowych ma teraz bardzo proste techniki włączania tego tokena.

pdr
źródło
3
  • Użyj flag securei httpOnly.
  • Zakoduj sesyjne pliki cookie i podpisz kodowane dane za pomocą MAC. Sprawdź podpis na serwerze za każdym razem, zanim zechcesz zdekodować dane cookie sesji. (Railsy domyślnie to robią).
yfeldblum
źródło