2012-08-10 9 views
73

私は実際に「署名されたクッキー」が何であるか把握しようとしています。 はネット上であまりありません、と私はしようとした場合、この:connect/expressjsで「署名された」クッキーとは何ですか?

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

しかし、まだ...クッキーはまだブラウザ上で100%正常である、と私は本当に「署名」かわからないですここに(?私は一種のクライアント上でいくつかのすごみを「見る」ことを期待していた、塩としての「秘密」を使用して暗号化されたデータのようなもの)は

ドキュメントは(https://github.com/expressjs/cookie-parserを)言う:

解析Cookieヘッダーと入力してreq.cookies は、オブジェクトがクッキー名でキー付けされています。任意で secret文字列を渡すことで、署名付きのCookieサポートを有効にすることができます。req.secretを割り当てます。 他のミドルウェアで使用される可能性があります。

誰でも知っていますか?

メル。

答えて

79

クッキーは引き続き表示されますが、署名があるため、クライアントがクッキーを変更したかどうかを検出できます。

値(現在のクッキー)のHMACを作成することで動作し、base64でエンコードされます。 Cookieが読み込まれると、署名が再計算され、添付されている署名と一致するかどうかが確認されます。

一致しない場合は、エラーが発生します。

クッキーの内容も非表示にしたい場合は、代わりに暗号化するか、サーバー側のセッションに保存するだけです。既にそこにあるミドルウェアがあるかどうかはわかりません。

編集

そして、あなたは

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

を使用するとreqsignedCookiesオブジェクトを使用署名クッキーにアクセスするために署名したクッキーを作成するには:emostarよう

req.signedCookies['name'] 
+0

おかげにオプションとして追加する文字列です!しかし...私は現時点でクッキーに追加された署名を見ていません。つまり、クライアントでは、クッキーは署名なしでそこにあります。 'express.cookieParser()'に秘密のメッセージを入れる以外に、私がクッキーの署名を有効にするために必要なことはありますか? – Merc

+0

ハングアップ...私は 'res.cookie( 'somethingElseAgainAndAgain'、 'signed?Maybe');でクッキーを設定していますが、それは署名しているのでしょうか? cookieParser()ミドルウェアは署名されたCookieを解析する準備ができていますが、設定を正しく行っていません...手動で署名する必要がありますか? – Merc

+0

それはすべてが必要です、おそらくあなたのクッキーは、あなたが秘密を追加する前からですか?クッキーを取り出して試してみてください。 – staackuser2

16

うんを値が改ざんされていないことを保証することだけを言及しています。これは、異なるオブジェクト(req.signedCookies)に配置されて2つを区別し、開発者がインテントを表示できるようにします。 req.cookiesに他の人たちと一緒に保存されていれば、同じ名前の署名のないクッキーを作るだけで、その目的をすべて破ることができます。 、それが署名したクッキーに署名するcookie-parserで使用され

8

私はこの... に良い答えのためにかなり大規模な検索やcookie-signatureのソースコードを見てきたが、私に何を締結したクッキーの理解を与えましたです。

val

はもちろん、クッキーの値であり、 secretはあなたが cookie-parser

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

+2

保存されている標準的なリンクは次のとおりです。https://github.com/tj/node-cookie-signature/blob/60f3be29232145e445aada51d520d370b0a52161/index.js#L16 –

+0

コードを読むことは確かにはるかに優れた説明でした。ありがとう! –

関連する問題