2012-08-10 37 views
73

Ben "imzalı çerezler" aslında ne olduğunu anlamaya çalışıyorum. net fazla bir şey yok ve ben çalışırsanız bu:Connect/expressjs'de "imzalı" çerezler nelerdir?

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

Ama yine de ... Çerezler hala tarayıcıda% 100 normaldir ve gerçekten "imzalı" bilmiyorum olduğunu burada (? Ben tür istemci üzerinde bazı garabeti "görmek" umuyordum, tuz olarak "bir gizli" kullanılarak şifrelenmiş verileri gibi bir şey)

belgeleri (https://github.com/expressjs/cookie-parser) der ki:

Ayrıştırma Çerez header ve nüfus req.cookies , çerez adları tarafından girilen bir nesneye sahip. Opsiyonel olarak , dizgesini req.secret atayacak şekilde imzalı çerez desteğini etkinleştirebilir, böylece diğer ara katman yazılımları tarafından kullanılabilir.

bilen var mı

?

Merc.

cevap

79

çerez görünmeye devam edeceği, ancak müşteri tanımlama modifiye eğer algılayabilir yüzden, bir imzası vardır.

Bu değeri (cari çerezinin) bir HMAC oluşturarak çalışır

ve base64 onu kodlanmış. Çerez okunduğunda, imzayı yeniden hesaplar ve ona ekli imza ile eşleştiğinden emin olur. o uymuyorsa

, o zaman bir hata verecektir. siz de çerez içeriğini gizlemek istiyorsanız

, bunun yerine onu şifrelemek (ya da sadece sunucu tarafında oturumunda saklar) gerekmektedir. Zaten orada olan ya da olmayan bir orta katman olup olmadığından emin değilim.

Düzenleme

Ve

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

kullanırsınız Ve imzalı çerez req ait signedCookies nesnesini kullanın erişmek için bir imzalı çerez oluşturmak: emostar gibi

req.signedCookies['name'] 
+0

sayesinde seçenek olarak eklemek dizedir! Ama ... Şu anda çereze eklenen imzayı görmüyorum. Yani müşteri, çerezde imzasızdır. Express.cookieParser() 'de gizli mesajı içermek dışında, çerez imzalamayı etkinleştirmek için yapmam gereken bir şey var mı? – Merc

+0

Bekle ... Çerezleri res.cookie ile ayarlıyorum ('somethingElseAgainAndAgain', 'imzalı? Belki'); 'Ama ... Bunu imzaladığından şüpheliyim! CookieParser() ara katman yazılımı imzalı çerezleri ayrıştırmaya hazırdır, ancak kesinlikle doğru ayarları yapmıyorum ... el ile imzalamak zorunda mıyım? – Merc

+0

Bu gerekli olan her şey olabilir, belki de sizin sırrınızı eklemeden önce sizin çereziniz mi? Bu oyuncunun dişliye dönüp dönmediğini görmek için çerezi kaldırmayı deneyin. – staackuser2

16

yup bir değerin kurcalanmadığından emin olmak için basitçe bahseder. Geliştiricinin niyet göstermesine izin vermek için, ikisi arasında ayrım yapmak üzere farklı bir nesneye (req.signedCookies) yerleştirilir. Eğer req.cookies'de diğerleri ile birlikte saklandılarsa, birileri aynı isimde imzasız bir kurabiyeler hazırlayabilirlerdi. O imzalı çerezleri imzalamak için cookie-parser tarafından kullanılır

8

bu ... için iyi bir yanıt için oldukça kapsamlı arama Ve cookie-signature kaynak koduna bakarak edilmiştir bana ne imzalı çerez daha iyi anlaşılmasını verdik olduğunu.

val

elbette çerez değeridir ve secret sen cookie-parser

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

+2

İşte korunmuş bir kanonik bağlantı: https://github.com/tj/node-cookie-signature/blob/60f3be29232145e445aada51d520d370b0a52161/index.js#L16 –

+0

Kodun okunması gerçekten çok daha iyi bir açıklamaydı. Teşekkürler! –