2012-09-01 15 views
8

Zabieram moją pierwszą wyprawę do modułu bezpieczeństwa Pyramid. Używam tego kodu logowania ustawić auth_tkt:Pyramid.security pytania: Podwójne ciasteczka? Niepewne pliki cookie? Wygaśnięcie?

@view_config(route_name='LoginForm', request_method='POST', renderer='string') 
class LoginForm(SimpleObject): 
    def __call__(self): 

     emailAddress = self.request.params.get('emailAddress') 
     password = self.request.params.get('password') 

     if emailAddress != '[email protected]' or password != 'testpassword': 
      errorDictionary = { 'message' : "Either the email address or password is wrong." } 
      self.request.response.status = 400 
      return json.dumps(errorDictionary, default=json_util.default) 

     testUserGUID = '123123123' 

     headers = remember(self.request, testUserGUID) 
     return HTTPOk(headers=headers) 

wydaje się działać ok, ale istnieją pewne zagadkowe szczegóły:

Przede wszystkim, 2 ciasteczka rzeczywiście gotowi zamiast jednego. Te 2 ciasteczka są identyczne (obie z nazwą "auth_tkt") z wyjątkiem jednej różnicy: jedna ma wartość hosta ".www.mydomain.com", podczas gdy druga strona ma wartość hosta "www.mydomain.com". 2 pliki cookie są ustawione zamiast jednego? Jakie jest znaczenie różnicy wartości hosta?

Pytanie 2, narzędzia internetowe zgłaszają, że żadne pliki cookie nie są bezpieczne. Co mogę zrobić, aby upewnić się, że pliki cookie są bezpieczne?

Pytanie 3: Oba pliki cookie mają wartość wygasania "Na koniec sesji". Co to oznacza i jak mogę sam dostosować wartość wygaśnięcia? Jaka jest zalecana praktyka w przypadku wygaśnięcia ważności plików cookie logowania?

Pytanie 4: Nie rozumiem, dlaczego pierwszym argumentem "zapamiętaj" jest self.request zamiast self.request.response. Czy dane nie powinny być pamiętane w obiekcie odpowiedzi, a nie w obiekcie żądania?

+0

Prawdopodobnie chodziło o 'serverUserGUID = '1123123123''; nazywasz 'remember' tą nazwą zmiennej. –

+0

Dzięki ... Naprawiłem błąd. – zakdances

Odpowiedz

11
  1. Właściwie 3 pliki cookie są generowane; jeden bez klucza Domain, jeden z, a trzeci z wersją wieloznaczną twojej domeny (kropka wiodąca). Twoja przeglądarka zwykle łączy te dwa elementy lub ignoruje jeden z nich (który różni się w zależności od przeglądarki, dlatego ustawiono 2).

    Ten ostatni plik cookie jest generowany, gdy opcja wild_domain jest ustawiona na AuthTktAuthenticationPolicy (Prawda domyślnie); zobacz AuthTktAuthenticationPolicy API. Potrzebujesz tego, jeśli plik cookie uwierzytelniający ma zostać udostępniony między różnymi subdomenami (pomyśl app1.domain, app2.domain); Twoja przeglądarka nie będzie udostępniać plików cookie w subdomenach bez pliku cookie zawierającego symbole wieloznaczne.

  2. Musisz ustawić opcję secure na swojej polityce auth w celu uzyskania plików cookie, aby ustawić bezpieczny zestaw flag. Ponownie zobacz API.

  3. Nie jest ustawiona wartość wygasania ważności, co oznacza, że ​​pliki cookie są usuwane po zamknięciu przeglądarki (do końca sesji wyświetla się przeglądarka). Jeśli chcesz, aby użytkownicy byli wylogowywani po zamknięciu przeglądarki, pozostaw to ustawienie domyślne.

    Tylko jeśli chcesz sesje trwać całej zamknięcia przeglądarki, ustawić maksymalny wiek cookie zobaczyć opcję w APImax_age. Ta opcja spowoduje, że przeglądarki przechowują plik cookie na dysku, który utrzymuje się między zamknięciami przeglądarki, i usuwa je, gdy minie maksymalny wiek.

    Należy pamiętać, że obiekt zasad AuthTktAuthenticationPolicy może zarządzać sesjami logowania w bardziej szczegółowy sposób, ograniczając czas, w jakim uzna plik cookie uwierzytelniania za prawidłowy, i pozwoli skonfigurować politykę odświeżania plików cookie. W przypadku takiej polityki odświeżania użytkownicy będą otrzymywać nowe (odświeżone) pliki cookie, ponieważ będą nadal korzystać z aplikacji, ale jeśli nie połączą się z serwerem w określonym czasie, ich pliki cookie zostaną uznane za nieważne i będą miały zalogować się ponownie.

    Zobacz opcje timeout i reissue_time w API documentation, aby uzyskać więcej informacji na temat konfiguracji.

  4. Obiekt polityki wymaga kilku informacji z żądania, aby móc wygenerować pliki cookie, w szczególności wszystkie nazwy hosta serwera.

+1

Dziękujemy za wyjaśnienia. Chciałbym wiedzieć tylko, czy AuthTKTAuthentication Policy jest bezpieczny przed atakami csrf? Jeśli nie, to jak możemy to uczynić bezpiecznym. I jeszcze jedno, jak możemy go użyć do serwerów, które łączą się z aplikacją mobilną klienta. Ciasteczko byłoby trudne, jak sądzę. A czy opcje tokenów nie byłyby lepsze? –

+1

Ustaw 'http_only' na 'True', aby powiedzieć przeglądarce, aby ukryła plik cookie przed JavaScript; to sprawia, że ​​ataki CSRF kradną pliki cookie nieskuteczne. Pliki cookie to tylko nagłówki HTTP, Twój klient mobilny będzie musiał nimi zarządzać tak, jak robią to w przypadku każdej innej witryny. Nie mam pojęcia, co masz na myśli przez opcje tokena. –

+0

Nie jestem pewien, czy to zapobiegnie atakom csrf, pliki cookie są automatycznie dołączane do każdego żądania do domeny, z której zostały ustawione. Ataki Csrf właśnie to robią. Pytam o tworzenie tokenów i obsługę klientów, a serwer zapamiętuje token wydany konkretnemu użytkownikowi. –