php - Express Web 框架中 session key 的重要性

标签 php node.js session express

我对 session key 的重要性感到很困惑。我正在使用 Express 和 Node 进行 Web 开发,目前,我正在尝试实现一个简单的登录。以下代码取自 Express 中的 session 示例。

// Required by session() middleware
// pass the secret for signed cookies
// (required by session())
app.use(express.cookieParser('keyboard cat'));

// Populates req.session
app.use(express.session());

它使用“键盘猫”作为 session secret 。我环顾四周的关于 session secret 的许多事情都建议我将其更改为自定义的东西。我现在有 3 个与此相关的具体问题。

  1. 为什么我以前在使用 PHP 时没有看到这个?
  2. session key 的具体用途是什么?
  3. 假设我更改了 session key 。我的代码是开源的。在那种情况下,改变它会不会有点多余?我没有看到要求用户提供自定义键作为选项。
  4. 我正在考虑生成一个随机 UUID 来填充 key 。这有问题吗? (在安全方面)

最佳答案

  1. 因为 PHP 不是 Nodejs。 PHP 中的 session 管理与 Node 中的 session 管理不同: Node 永不消亡,与 PHP 不同,PHP 会不断地由您的服务器守护程序(apache、IIS、您有什么)调用,要求生成一些内容,然后结束其进程。 Node 相当于 Apache plus PHP。
  2. 它用于加密 session cookie,以便您可以合理(但不是 100%)确定 cookie 不是假的,并且应将连接视为与 express 更大 session 的一部分。
  3. 这就是为什么您不将字符串放在源代码中的原因。您将其设为环境变量并将其作为 process.env("SESSION_SECRET") 读入,或者使用带有 https://npmjs.org/package/dotenv.env 文件,并确保这些文件永远不会触及您的存储库(svn/git exclude/ignores),以便您的 secret 数据保持 secret 。
  4. 当您的 Node 应用程序运行时, secret 是不可变的。提出一个长而有趣的句子比 UUID 要好得多,UUID 通常比 短得多“我不认为我需要一个 secret ,但是 Stackoverflow 上的一些随机数告诉我 Express 需要一个所以在这里我们是”

我如何使用 session :

.env 文件(始终在我的 .gitignore 文件中,因此它永远不会访问我的公共(public)存储库):

SECRET="This is my funky secret oh my god it has ninja turtles"

app.js:

var express = require('express'),
    env = (function(){
      var Habitat = require("habitat");
      Habitat.load();
      return new Habitat();
    }()),
    app = express();

app.use(express.compress()); // gzip all the things. If possible.
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.cookieSession({
  key: "mysite.sid",
  // seeing this tells you nothing about the actual secret:
  secret: env.get("SESSION_SECRET"),
  cookie: {
    maxAge: 2678400000 // 31 days
  }
}));
app.use(express.csrf());

该 CSRF 位确保页面请求来自您自己的网站,而不是 cURL 请求或嵌入到其他人的网站。 http://expressjs.com/api.html#csrf了解更多信息。

关于php - Express Web 框架中 session key 的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565512/

相关文章:

c# - 推送 bin/js 文件后,Servicestack 丢失 session ,直到缓存清除

node.js - 如何将我的 koa 路由拆分为单独的文件?

node.js - 推送到 Heroku (node.js) 时出错

javascript - IE11 Script1002 语法错误。 WebpackJsonP 未定义

php - 将数组键设置为另一个数组值的值 - PHP

php - 使用 mysql 存储的安全 php session 处理

react-native - 如何在 react-native-webview 中保持最后一个 Web session 处于事件状态?

php - 在网络上读取 PNG 元数据

php - mb_convert_encoding,启用 mbstring 时未定义的函数

javascript - Laravel Spark Vue.js 模板中的 @ 符号是什么?