Connect / expressjs'deki "imzalanmış" çerezler nelerdir?


114

"İmzalı tanımlama bilgilerinin" gerçekte ne olduğunu anlamaya çalışıyorum. İnternette pek bir şey yok ve bunu denersem:

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

Ama yine de ... Çerezler tarayıcıda hala% 100 normal ve burada "imzalanmış" ın ne olduğunu gerçekten bilmiyorum (istemcide bazı tuhaflıklar "görmeyi" umuyordum, şifrelenmiş veriler gibi bir şey Tuz olarak "bir sır"?)

Belgeler ( https://github.com/expressjs/cookie-parser ) diyor :

Tanımlama bilgisi başlığını ayrıştırın req.cookies ve tanımlama bilgisi adlarıyla anahtarlanmış bir nesneyle doldurun. İsteğe bağlı olarak, diğer ara yazılımlar tarafından kullanılabilmesi için secretatayan bir dize geçirerek imzalı çerez desteğini etkinleştirebilirsiniz req.secret.

Kimse biliyor mu?

Merc.

Yanıtlar:


135

Tanımlama bilgisi yine görünür olacaktır, ancak bir imzası vardır, böylece istemcinin tanımlama bilgisini değiştirip değiştirmediğini tespit edebilir.

Değerin (geçerli çerez) bir HMAC'sini oluşturarak çalışır ve base64 onu kodlar. Tanımlama bilgisi okunduğunda, imzayı yeniden hesaplar ve kendisine eklenen imzayla eşleştiğinden emin olur.

Eğer eşleşmezse, hata verecektir.

Tanımlama bilgisinin içeriğini de gizlemek istiyorsanız, bunun yerine onu şifrelemelisiniz (veya sadece sunucu tarafı oturumunda saklamalısınız). Bunun için bir ara yazılım olup olmadığından emin değilim.

Düzenle

Ve imzalı bir çerez oluşturmak için kullanacaksınız

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

İmzalı bir çereze erişmek için şu signedCookiesnesneyi kullanın req:

req.signedCookies['name']

Teşekkürler! Ancak ... Şu anda çerezlere eklenen imzayı görmüyorum. Yani, istemcide çerez imza olmadan oradadır. Gizli mesajı eklemek dışında çerez imzalamayı etkinleştirmek için yapmam gereken bir şey var mı express.cookieParser()?
Merc

Bekle ... Çerezleri ayarlıyorum res.cookie('somethingElseAgainAndAgain', 'signed? Maybe' );ama ... Bunun imzaladığından şüpheliyim! CookieParser () ara yazılım, imzalı çerezleri ayrıştırmaya hazır, ancak ayarları kesinlikle doğru yapmıyorum ... onları manuel olarak imzalamalı mıyım ...?
Merc

6
Öyleydi: (res.cookie(name, value, { signed: true })). Belgelerden eksik "ayrıntı" bildiriliyor ...
Merc

6
Bir oturumu ele geçirmek farklı bir şeydir ... bu, B kullanıcısının A kullanıcısının kimliğini almasıdır.
staackuser2

9
Bahsetmeye değer If it does not match, then it will give an error.Bir hata değil . Yalnızca bu anahtar için request.signedCookie ayarlanmadı . Daha çok görmezden gelinmiş
basarat

25

Evet, tıpkı emostar gibi, bunun basitçe bir değerin değiştirilmediğinden emin olmak için olduğunu söyler. İkisini ayırt etmek için farklı bir nesneye (req.signedCookies) yerleştirilerek geliştiricinin niyet göstermesine olanak tanır. Diğerleriyle birlikte req.cookies'te saklanmışlarsa, birileri aynı adı taşıyan imzasız bir çerez oluşturabilir ve tüm amacını bozabilir.


11

Buna iyi bir cevap bulmak için oldukça kapsamlı bir araştırma yaptım ... Ve imzalı çerezleri imzalamak için cookie-signaturekullanılan kaynak koduna bakmak cookie-parserbana imzalı çerezin ne olduğunu daha iyi anlamamı sağladı.

valelbette çerezin değeridir ve secretseçenek olarak eklediğiniz dizedir. cookie-parser

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


3
İşte korunmuş bir kanonik bağlantı: github.com/tj/node-cookie-signature/blob/…

Kodu okumak gerçekten çok daha iyi bir açıklamaydı. Teşekkürler!

0

Tanımlama bilgisi ayrıştırıcı 1.4.4 sürümünü kullandım.

İmzalı çerezleri ve tarayıcıda şifrelenmiş imzalı çerezleri ekleyebilirim, imzalı çerezi editThisCookie (krom eklentisi) kullanarak düzenlemeye çalışırsam, çerez ayrıştırıcı harici değişikliği tespit eder ve ardından değer olarak false değerini ayarlar.

response.cookie('userId',401,{signed: true})

Tarayıcıdaki yanıt başlığı şu şekilde görünür:

Set-Cookie: empId=s%3A101.US2oSV4TSvfkvvEQ5fj1sXsjj8rNxx2ph4VdHNTuKX8; Path=/

İmzalı çerez alın

request.signedCookies

https://gist.github.com/dineshbalaji/607d166f0240f932a5cb02099b0ece4c

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.