【问题标题】:Expressjs - Ideal Session Secret SizeExpressjs - 理想的会话秘密大小
【发布时间】:2021-10-14 00:26:42
【问题描述】:

对于secret 的会话express.session,理想的大小是多少?

【问题讨论】:

  • Session Secret 是创建会话 id 的参数之一,您可以使用任意长度的字符串。然而,与其使用更长的字符串,不如尝试使用具有不同字符组合的字符串。
  • 而Secret将成为cookie的一部分,这不应与标准浏览器cookie存储长度冲突
  • @hilarudeens,那是什么?

标签: node.js session express


【解决方案1】:

HILARUDEEN S ALLAUDEEN 的答案是错误的

无论秘密有多大 - 它对 cookie 大小没有影响

你可以在这里查看https://npm.runkit.com/cookie-signature

var cookie = require("cookie-signature")

cookie.sign('hello', 'tobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscooltobiiscool')

结果长度相同


sha256 的答案是 256

快速会话正在使用https://www.npmjs.com/package/cookie-signature

符号功能来了

https://github.com/tj/node-cookie-signature/blob/025a9f3eaa65f589c766b00bf64763581fa49776/index.js#L16-L24

一些recommend 32 bytesothers recommend 64

让我们放心使用 256

【讨论】:

【解决方案2】:

Cookie 的标准大小:

一般来说,Cookie 是 HTTP 客户端(可能是浏览器)作为请求的一部分发送的令牌。由于 HTTP 无状态协议 cookie 是告诉服务器谁是实际客户端的唯一方法。就拿浏览器来说吧,浏览器对存储cookie有一定的限制,要通过What is the maximum size of a cookie, and how many can be stored in a browser for each web site?

由于 cookie 是每个请求的一部分,因此在 cookie 中存储更大的令牌/值/字符串将占用大量带宽。所以绝对不建议存储大数据。

煎茶的连接:

Express 框架内部依赖于连接框架来管理会话、cookie 和 .您可以从这个https://github.com/visionmedia/express/blob/master/package.json 中识别。您可以通过 JSON 中的依赖项键。

Connect 在会话/Cookie 管理中的作用:

在 cookie 生成中,Secret "String" 在避免 cookie 篡改方面发挥着关键作用。在内部,程序将生成编码字符串并将其作为 cookie 的一部分附加。明确地说,您会在浏览器中看到名称为“connect.sid”的 cookie(这是默认的,但您可以覆盖名称)。您可以使用任何开发人员附加组件在浏览器本身中阅读。

针对“connect.sid”的值存储包含两部分。第一个是“会话 ID”,第二个是“签名”。如下所示,

<session id encoded> . <signature>

生成这种cookie格式的代码部分如下,

function session(options){
  ...
  ...

  return function session(req, res, next) {
    ...
    ...

    // set-cookie
    res.on('header', function(){
      ...
      ...

      /*******************************************************/
      /*********** Cookie Generating Code ********************/

      var val = 's:' + signature.sign(req.sessionID, secret);
      val = cookie.serialize(key, val);
      debug('set-cookie %s', val);
      res.setHeader('Set-Cookie', val);
      /*********** Cookie Generating Code *******************/

    });
    ...
    ...

签名生成:

连接在“cookie-signature”模块中实现的调用sign()函数。您可以从本页https://npmjs.org/package/cookie-signature 中的示例轻松了解 sign() 函数的工作原理,并且您可以从中深入了解 https://github.com/visionmedia/node-cookie-signature/blob/master/index.js

结论:

最后,“秘密”字符串 express 将作为 cookie 的一部分作为签名。所以你可以使用任何长度的“秘密”字符串,除非它(sessionid 和签名)超过了标准浏览器支持的大小。

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2017-06-30
    • 2016-05-03
    • 1970-01-01
    • 2010-12-04
    • 2016-10-31
    相关资源
    最近更新 更多