Jak działa flaga „Bezpieczne” pliku cookie?

102

Wiem, że plik cookie z secureflagą nie zostanie wysłany niezaszyfrowanym połączeniem. Zastanawiam się, jak to działa dogłębnie.

Kto jest odpowiedzialny za określenie, czy plik cookie zostanie wysłany, czy nie?

przetrząsać
źródło

Odpowiedzi:

92

Klient ustawia to tylko dla połączeń szyfrowanych i jest to zdefiniowane w RFC 6265 :

Atrybut Secure ogranicza zakres pliku cookie do „bezpiecznych” kanałów (gdzie „bezpieczny” jest definiowany przez klienta użytkownika). Gdy plik cookie ma atrybut Secure, agent użytkownika umieści plik cookie w żądaniu HTTP tylko wtedy, gdy żądanie jest przesyłane przez bezpieczny kanał (zwykle HTTP over Transport Layer Security (TLS) [RFC2818]).

Chociaż pozornie przydatny do ochrony plików cookie przed aktywnymi atakami sieciowymi, atrybut Secure chroni tylko poufność pliku cookie. Aktywny napastnik sieciowy może nadpisać Bezpieczne pliki cookie z niezabezpieczonego kanału, zakłócając ich integralność (więcej informacji znajduje się w sekcji 8.6).

Cratylus
źródło
4
w przypadku, gdy strona klienta nie ma jeszcze plików cookie i powinny one być wysyłane po stronie serwera (np. logowanie), czy strona serwera zdecyduje się dołączyć plik cookie w odpowiedzi?
ted
3
Serwer początkowo ustawia pliki cookie za pomocą opcji „Set-Cookie headers”
Ivan
49

Jeszcze tylko słowo na ten temat:

Pomijanie, secureponieważ Twoja witryna example.comjest w pełni https, nie wystarczy.

Jeśli twój użytkownik wyraźnie dociera do niego http://example.com, zostanie przekierowany, https://example.comale to już za późno; pierwsze żądanie zawierało plik cookie.

Alain Tiemblo
źródło
6
Wiem, że to jest stare, ale wstępne ładowanie HSTS pomaga w tej sytuacji, zapobiegając częstemu występowaniu tego problemu. To wciąż nie jest poprawka w 100%, ale jest to kolejna rzecz do rozważenia, jeśli naprawdę chcesz uniknąć bezpiecznego pliku cookie.
Mr. MonoChrome
5
@ Mr.MonoChrome Dlaczego chcesz uniknąć bezpiecznego pliku cookie?
MEMark
@ Mr.MonoChrome, chociaż wydaje mi się, że niektóre starsze lub słabsze przeglądarki nawet nie obsługują HSTS
oldboy
1
Słuszna uwaga. W przypadku aplikacji .NET lepiej jest wykonać przekierowanie w IIS (lub web.config) niż programistycznie (na przykład globals.asax)
piris
Więc jeśli nie przekierowujesz z http na https i obsługujesz tylko na https, nie potrzebujesz secure?
braks