「署名付きCookie」が実際に何であるかを把握しようとしています。ネット上にはあまりないので、これを試してみると:
app.use(express.cookieParser('A secret'));
しかし、それでも... Cookieはブラウザ上では100%正常であり、ここで「署名」が何であるかはよくわかりません(クライアントで何らかの奇妙さ、「塩としての「秘密」?)
ドキュメントには( https://github.com/expressjs/cookie-parser )と書かれています:
Cookieヘッダーを解析し、
req.cookies
にCookie名をキーとするオブジェクトを設定します。オプションで、req.secret
を割り当てるsecret
文字列を渡すことにより、署名付きCookieのサポートを有効にすることができます。これにより、他のミドルウェアで使用できるようになります。
誰か知っていますか?
メルク。
Cookieは引き続き表示されますが、署名が付いているため、クライアントがCookieを変更したかどうかを検出できます。
値(現在のCookie)のHMACを作成し、base64でエンコードして機能します。 Cookieが読み取られると、署名を再計算し、添付されている署名と一致することを確認します。
一致しない場合、エラーが発生します。
Cookieのコンテンツも非表示にする場合は、代わりに暗号化する(または単にサーバー側セッションに保存する)必要があります。そのためのミドルウェアがすでにあるかどうかはわかりません。
編集
そして、あなたが使用する署名付きクッキーを作成するには
res.cookie('name', 'value', {signed: true})
また、署名付きCookieにアクセスするには、signedCookies
のreq
オブジェクトを使用します。
req.signedCookies['name']
エモスターのように、値が改ざんされていないことを確認するだけです。 2つのオブジェクトを区別するために異なるオブジェクト(req.signedCookies)に配置され、開発者が意図を示すことができるようにします。それらが他の人と一緒にreq.cookiesに保存されている場合、誰かが単に同じ名前の無署名のcookieを作成し、それらの目的全体を無効にすることができます。
私はこれに対する良い答えをかなり広範囲に探しています...そして、cookie-signature
のソースコードを見ると、cookie-parser
が署名されたCookieに署名するために使用しているので、署名されたCookieは。
val
はもちろんCookieの値であり、secret
はcookie-parser
のオプションとして追加する文字列です
https://github.com/visionmedia/node-cookie-signature/blob/master/index.js#L16
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