139

私は「署名されたクッキー」が実際に何であるかを理解しようとしています。ネット上にはあまりありません、そして私がこれを試してみると:

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

しかし、それでも... Cookieはブラウザ上で100%正常であり、ここで「署名済み」が何であるかはわかりません(クライアントで、データを使用して暗号化されたような奇妙なものを「見る」ことを望んでいました)塩としての「秘密」?)

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

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

誰か知っていますか?

メルク。

4

4 に答える 4

161

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

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

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

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

編集

そして、あなたが使用する署名されたクッキーを作成するために

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

また、署名されたCookieにアクセスするには、次のsignedCookiesオブジェクトを使用しますreq

req.signedCookies['name']
于 2012-08-10T08:40:26.493 に答える
28

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

于 2012-08-10T16:24:39.513 に答える