2012-08-10 19 views
73

Próbuję dowiedzieć się, co właściwie oznacza "podpisane ciasteczka". Nie ma zbyt wiele w internecie, a jeśli próbuję to:Co to są "podpisane" pliki cookie w programie connect/expressjs?

app.use(express.cookieParser('A secret')); 

Ale wciąż ... Cookies są nadal w 100% normalny w przeglądarce, a ja naprawdę nie wiem co „podpisany” jest tutaj (? I był rodzaj nadzieją „zobaczyć” trochę tajemniczości na kliencie, coś danych zaszyfrowanych przy użyciu programu „tajnym” jako sól)

dokumentacja mówi (https://github.com/expressjs/cookie-parser):

Parse Nagłówek i nagłówek pliku cookiereq.cookies z obiektem wykreślonym przez nazwy plików cookie. Opcjonalnie możesz włączyć podpisaną obsługę plików cookie, przekazując ciąg znaków secret, który przypisuje req.secret, więc może być używany przez inne oprogramowanie pośredniczące.

Czy ktoś wie?

Merc.

Odpowiedz

79

Plik cookie będzie nadal widoczny, ale ma podpis, dzięki czemu może wykryć, czy klient zmodyfikował plik cookie.

Działa, tworząc HMAC wartości (obecny plik cookie) i kodowany przez base64. Kiedy ciasteczko zostanie odczytane, przelicza podpis i upewnia się, że pasuje do podpisu dołączonego do niego.

Jeśli nie pasuje, oznacza to błąd.

Jeśli chcesz ukryć zawartość pliku cookie, powinieneś go zaszyfrować (lub po prostu zapisać w sesji po stronie serwera). Nie jestem pewien, czy istnieje już tam oprogramowanie pośrednie, czy nie.

Edit

i tworzenia podpisanego pliku cookie należałoby użyć

res.cookie('name', 'value', {signed: true}) 

oraz dostępu podpisane cookies użyć signedCookies przedmiot req:

req.signedCookies['name'] 
+0

dzięki! Ale ... W tej chwili nie widzę podpisu dołączonego do ciasteczka. Oznacza to, że w kliencie plik cookie istnieje bez podpisu. Czy jest coś, co muszę zrobić, aby włączyć podpisywanie plików cookie, inne niż dołączenie tajnej wiadomości do 'express.cookieParser()'? – Merc

+0

Trzymaj się ... Ustawiam ciasteczka za pomocą 'res.cookie (" somethingElseAgainAndAgain ', "signed? Maybe');' but ... Wątpię, że to jest podpisanie! Oprogramowanie pośredniczące cookieParser() jest gotowe do parsowania podpisanych ciasteczek, ale zdecydowanie nie robię tego poprawnie ... czy muszę ręcznie je podpisywać ...? – Merc

+0

To wszystko, czego potrzeba, może twój plik cookie pochodzi sprzed dodania sekretu? Spróbuj usunąć plik cookie, aby sprawdzić, czy wrzuci go do ekwipunku. – staackuser2

16

yup jak emostar wspomina, że ​​chodzi po prostu o zapewnienie, że wartość nie została naruszona. Jest umieszczony w innym obiekcie (req.signedCookies), aby rozróżnić te dwa elementy, pozwalając programistom na pokazanie intencji. Gdyby były przechowywane w req.cookies wraz z innymi, ktoś mógłby po prostu stworzyć niepodpisany plik cookie o tej samej nazwie, pokonując cały ich cel.

8

I zostały poszukiwania dość rozległe za dobrą odpowiedź na to ... i patrząc na kodzie źródłowym cookie-signature, który jest używany przez cookie-parser podpisać podpisanych ciasteczka dały mi lepiej zrozumieć, co podpisanego pliku cookie jest.

val to oczywiście wartość cookie i secret jest ciąg dodać jako opcja do cookie-parser

https://github.com/visionmedia/node-cookie-signature/blob/master/index.js#L16

+2

Oto zachowany link kanoniczny: https://github.com/tj/node-cookie-signature/blob/60f3be29232145e445aada51d520d370b0a52161/index.js#L16 –

+0

Czytanie kodu było znacznie lepszym wyjaśnieniem. Dzięki! –