Что такое "подписанные" куки в connect/expressjs?

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

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

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

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

Разверните заголовок Cookie и заселите req.cookies   с объектом, которым управляют имена файлов cookie. Необязательно    вы можете включить поддержку подписанных файлов cookie, передав    a secret, который присваивает req.secret так    он может использоваться другим промежуточным программным обеспечением.

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

Merc.

Ответ 1

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

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

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

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

Edit

Чтобы создать подписанный файл cookie, вы должны использовать

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

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

req.signedCookies['name']

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

Я использовал cookie-парсер версии 1.4.4.

Я мог бы добавить подписанные cookie файлы и подписанные cookie файлы, зашифрованные в браузере. Если я пытаюсь отредактировать подписанный cookie файл, используя editThisCookie (плагин chrome), то cookie-анализатор обнаруживает внешние изменения и затем устанавливает false в качестве значения.

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

Заголовок ответа в браузере, выглядит как

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

Получить подписанный файл cookie

request.signedCookies

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