2010-10-16 17 views
8

Używam Flask od jakiegoś czasu i naprawdę podoba mi się framework. Jedna rzecz, której nie rozumiem, to fakt, że w prawie wszystkich innych miejscach mówi się o przechowywaniu sesji na serwerze i identyfikatorze sesji klienta, który następnie identyfikuje sesję. Jednak po użyciu kolby, nie czuję potrzeby, aby to zrobić. Zapisywanie sesji jako cookie na kliencie kryptograficznie służy mojemu celowi i wydaje się być całkiem bezpieczne. Jedyną rzeczą istota nie jestem w stanie do szyfrowania kluczy sesji dla np:Dlaczego warto przechowywać sesje na serwerze zamiast w pliku cookie?

session['life'] = 'the great one' 

wydaje jak

life='gfhjfkjdfa some encryption kj' 

w pliku cookie zapisywane na kliencie. Ale jak by to miało znaczenie, ponieważ jest jeszcze zaszyfrowane. Jestem pewna, że ​​ludzie tutaj znają się o wiele lepiej niż ja, więc poproś kogoś o wyjaśnienie :-)

Odpowiedz

14

Nawet jeśli dane są szyfrowane, użytkownik nadal może wycofać swój cookie do poprzedniego stanu (chyba zacząć kodowania jednorazowe identyfikatory itp)

np Cookie mówi, że użytkownik ma 100 kredytów, użytkownik wydaje 100 kredytów, dostaje nowe ciasteczko z informacją, że ma 0 kredytów. Następnie mogą przywrócić poprzedni plik cookie (za 100 kredytów).

W zależności od tego, jak zaszyfrujesz plik cookie, użytkownik może również usuwać klucze, wstawiać fałszywe dane itp.

+0

Dzięki Nick! Ale znowu nie będzie szyfrowania zajmie to.do np. sesji [kredyty ] = 100 byłoby zapisane jako coś w rodzaju kredytów = 'agfkalh some encryption agakh' .A jeśli tajny klucz użyty do zaszyfrowania cookie jest nieznany użytkownikowi i jest wystarczająco trudny, jak on byłby w stanie spowodować jakąkolwiek zmianę.I mam na myśli na pewno może z wyprzedzeniem usuwać klucze i wstawiać fałszywe dane, ale dopóki nie jest w stanie odszyfrować pliku cookie, w jaki sposób można utworzyć dowolny problem – Rasmus

+6

Jeśli 100 kredytów jest zaszyfrowanych jako kredyty = "abc", użytkownik może to zobaczyć, i wie, że "abc" zostanie odszyfrowane do 100. Nie muszą być w stanie odszyfrować go samodzielnie, więc mogą wydać wszystkie kredyty, a następnie ustawić kredyty na "abc" ponownie Istnieją sposoby, aby temu zapobiec , ale nie jest to warte kłopotów, gdy można po prostu przechowywać dane na serwerze. – Nick

+0

Dzięki! ... to było coś, czego naprawdę szukałem, po prostu nie przeszło mi przez myśl ... – Rasmus

7

Jeśli dane sesji są potrzebne na serwerze, warto ją przechowywać na serwerze. Utrzymuje masową wysyłkę danych przesyłanych w obie strony przez klienta. Ponadto pliki cookie mają ograniczenie ilości danych, które mogą przechowywać.

+0

+1 za ładne, zwięzłe podsumowanie. –

+0

Dzięki Ned! ale w większości przypadków przyzwyczajenie się do tego, że dane będą nieistotne. – Rasmus

+2

Ale tak, +1, ponieważ uważam, że jest to jeden ważny powód, który, jak sądzę, mogę spokojnie zignorować na mojej aplikacji :-), ale wciąż czekam na więcej odpowiedzi! – Rasmus

6

Oprócz już wymienionych powyżej punktów

  1. Użytkownicy mogą wyłączyć cookies używając ich ustawienia przeglądarki. Wiele skanerów antywirusowych skanuje również i sygnalizuje pliki cookie jako ryzyko, z powodu których może również powodować, że pliki cookie nie są dozwolone na komputerze użytkownika.

  2. Pliki cookie mogą zostać usunięte przez użytkownika nawet w trakcie jego sesji. (W rzeczywistości przypadkowo zrobiłem to, kiedy jeden z moich komputerów zeskanował listę śledzących plików cookie ... i właśnie kliknąłem "Wyczyść" i wszystkie zniknęły). W przypadku, gdy użytkownik zdąży usunąć pliki cookie, stan użytkowników zostanie utracony.

Jeśli używasz plików cookie do zarządzania całym stanem, zawsze jesteś zależny od środowiska klienta i jego ustawień. W związku z tym prawdopodobnie będziesz potrzebować mechanizmu cofania w przypadku, gdy pliki cookie zostaną usunięte/zablokowane itp., Aby aplikacja działała poprawnie.

+0

Dzięki InSeane za udzielenie odpowiedzi, ale nie to chciałem wiedzieć :-). Chciałem się dowiedzieć, dlaczego przechowywać na serwerze jakiekolwiek dane związane z sesją. Chodzi mi o to, że nawet jeśli przechowujesz zmienne sesji na serwerze, będziesz musiał zapisać identyfikator sesji na kliencie w pliku cookie. Aby odpowiedzieć na to, co powiedziałeś, usuwając pliki cookie, użytkownik robi więcej szkód dla siebie, ponieważ traci sesja. Może być wylogowany, jeśli jest zalogowany na stronie, może nawet stracić trochę danych. Jeśli chodzi o wyłączanie plików cookie, domyślam się, że awaryjne rozwiązanie musi być kontynuowane. Dzięki – Rasmus

+1

@Alice - Właściwie to było to, o co chciałem. Zasadniczo, musisz przechowywać dane związane z sesją na serwerze, ponieważ przechowywanie ich na kliencie nie jest niezawodne ze względu na przykłady wskazane powyżej. Gdy pliki cookie są wyłączone, parametr sessionid jest zwykle przekazywany w postaci kwerendy jako jedna wartość. Sesje mogą być niezależne od plików cookie - nawet dla identyfikatora sesji – InSane

+0

"sessionid jest zwykle przekazywany w zapytaniu jako jego jedyna wartość" - Tak brzmi to dobrze..1 w górę ... Dzięki – Rasmus

1

Implementacja SecureCookie Kolba używa nie szyfruje wartości. Jedyne, co jest zapewnione, to to, że użytkownik nie może zmodyfikować pliku cookie bez znajomości sekretu używanego przez aplikację.

Powiązane problemy