web-dev-qa-db-ja.com

connect / expressjsの「署名付き」Cookieとは何ですか?

「署名付きCookie」が実際に何であるかを把握しようとしています。ネット上にはあまりないので、これを試してみると:

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

しかし、それでも... Cookieはブラウザ上では100%正常であり、ここで「署名」が何であるかはよくわかりません(クライアントで何らかの奇妙さ、「塩としての「秘密」?)

ドキュメントには( https://github.com/expressjs/cookie-parser )と書かれています:

Cookieヘッダーを解析し、req.cookiesにCookie名をキーとするオブジェクトを設定します。オプションで、req.secretを割り当てるsecret文字列を渡すことにより、署名付きCookieのサポートを有効にすることができます。これにより、他のミドルウェアで使用できるようになります。

誰か知っていますか?

メルク。

95
Merc

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

値(現在のCookie)のHMACを作成し、base64でエンコードして機能します。 Cookieが読み取られると、署名を再計算し、添付されている署名と一致することを確認します。

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

Cookieのコンテンツも非表示にする場合は、代わりに暗号化する(または単にサーバー側セッションに保存する)必要があります。そのためのミドルウェアがすでにあるかどうかはわかりません。

編集

そして、あなたが使用する署名付きクッキーを作成するには

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

また、署名付きCookieにアクセスするには、signedCookiesreqオブジェクトを使用します。

req.signedCookies['name']
110
staackuser2

エモスターのように、値が改ざんされていないことを確認するだけです。 2つのオブジェクトを区別するために異なるオブジェクト(req.signedCookies)に配置され、開発者が意図を示すことができるようにします。それらが他の人と一緒にreq.cookiesに保存されている場合、誰かが単に同じ名前の無署名のcookieを作成し、それらの目的全体を無効にすることができます。

23
TJ Holowaychuk

私はこれに対する良い答えをかなり広範囲に探しています...そして、cookie-signatureのソースコードを見ると、cookie-parserが署名されたCookieに署名するために使用しているので、署名されたCookieは。

valはもちろんCookieの値であり、secretcookie-parserのオプションとして追加する文字列です

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

11
Anders Östman

Cookie-parser 1.4.4バージョンを使用しました。

ブラウザで暗号化された署名付きCookieと署名付きCookieを追加できます。editThisCookie(クロムプラグイン)を使用して署名付きCookieを編集しようとすると、Cookieパーサーは外部変更を検出し、値としてfalseを設定します。

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

ブラウザの応答ヘッダーは、次のように表示されます

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

署名済みCookieを取得する

request.signedCookies

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

0
Dinesh