Что такое "подписанные" куки в 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