Вопрос по node.js, connect, cookies, express – Что такое «подписанные» куки в connect / expressjs?

88

Я пытаюсь выяснить, что такое "подписанные файлы cookie". на самом деле В сети не так много, и если я попробую это:

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

Но все же ... Печенье все еще на 100% нормально в браузере, и я действительно не знаю, что "подписано" здесь (я как бы надеялся "увидеть" некоторую странность на клиенте, что-то вроде данных, зашифрованных с использованием "секрета" как соли?)

В документации сказано (https://github.com/expressjs/cookie-parser):

Parse Cookie header and populate req.cookies with an object keyed by the cookie names. Optionally you may enabled signed cookie support by passing a secret string, which assigns req.secret so it may be used by other middleware.

Кто-нибудь знает?

Merc.

Ваш Ответ

3   ответа
11

Я долго искал хороший ответ на этот вопрос ... И, глядя на исходный кодcookie-signature, который используетсяcookie-parser Подписание подписанных файлов cookie позволило мне лучше понять, что такое подписанные файлы cookie.

val это, конечно, значение куки, иsecret это строка, которую вы добавляете в качестве опцииcookie-parser

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

Чтение кода было действительно лучшим объяснением. Спасибо!
Вот сохранившаяся каноническая ссылка:github.com/tj/node-cookie-signature/blob/…
101

Файл cookie все еще будет виден, но у него есть подпись, поэтому он может определить, изменил ли клиент файл cookie.

Он работает, создавая HMAC значения (текущий cookie), и base64 его кодирует. Когда файл cookie читается, он пересчитывает подпись и проверяет, соответствует ли подпись, прикрепленная к нему.

Если он не совпадает, он выдаст ошибку.

Если вы также хотите скрыть содержимое куки, вы должны зашифровать его (или просто сохранить в сеансе на стороне сервера). Я не уверен, есть ли уже промежуточное программное обеспечение для этого или нет.

Edit

И для создания подписанного куки вы бы использовали

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

И для доступа к подписанному cookie используйтеsignedCookies объектreq:

req.signedCookies['name']
Перехват сеанса - это что-то другое ... то есть пользователь B, принимающий личность пользователя A. Подписанные cookie-файлы - это просто способ убедиться, что содержимое cookie-файла не было изменено пользователем, поэтому его можно доверять.
Это было:(res.cookie(name, value, { signed: true })) , Сообщение об отсутствующей "детализации" из документации ... Merc
Спасибо! Но ... в данный момент я не вижу подписи, добавленной к cookie. То есть в клиенте cookie там без подписи. Есть ли что-то, что мне нужно сделать, чтобы включить подпись cookie, кроме включения секретного сообщения вexpress.cookieParser() ? Merc
Стоит отметитьIf it does not match, then it will give an error. Неerror, Просто request.signedCookie для этого ключаisn't set , Так больше похожеignored
Держись ... Я устанавливаю печенье сres.cookie('somethingElseAgainAndAgain', 'signed? Maybe' ); но ... я сомневаюсь, что это подписывает! Промежуточное программное обеспечение cookieParser () готово к анализу подписанных файлов cookie, но я определенно неправильно выполняю настройку ... нужно ли подписывать их вручную ...? Merc
21

Да, как Emostar упоминает, что это просто для того, чтобы убедиться, что значение не было подделано. Он размещен в другом объекте (req.signedCookies), чтобы различать их, что позволяет разработчику показать намерение. Если они хранятся в req.cookies вместе с другими, кто-то может просто создать неподписанный файл cookie с тем же именем, нанеся поражение всей их цели.

Похожие вопросы