glu*_*xon 22 php session node.js express
我对会话秘密的重要性感到困惑.我正在使用Express和Node进入Web开发,目前,我正在尝试实现一个简单的登录.以下代码取自Express中的会话示例.
// 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());
Run Code Online (Sandbox Code Playgroud)
它使用"键盘猫"作为会话秘密.关于会话秘密我看过的许多事情都建议我把它改成自定义的东西.我现在有3个具体问题.
Mik*_*ans 37
.env文件,并确保这些文件永远不会触及你的存储库(svn/git)排除/忽略)以便您的秘密数据保密."I didn't think I needed a secret, but the voices in my head told me Express needed one".我如何使用会话:
.env文件(总是在我的.gitignore文件中,所以它永远不会访问我的公共存储库):
SECRET="This is my funky secret oh my god it has ninja turtles"
Run Code Online (Sandbox Code Playgroud)
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());
Run Code Online (Sandbox Code Playgroud)
CSRF位确保页面请求来自您自己的站点,而不是cURL请求或嵌入其他人的网站.http://expressjs.com/api.html#csrf了解更多相关信息.
我认为在其他答案中忽略了一个重点,即secret参数是否使会话管理更安全.在这个Security.StackExchange问题中很好地讨论了它:为什么将会话ID直接存储在cookie中是不安全的?
我建议阅读它(不仅有相关的最高投票答案).
试着总结一下:如果会话ID是大的随机数,它不会明显减少会话被猜测和被劫持的可能性,但如果会话ID是自定义的,例如递增ID,这显然会有很大帮助,这是可能在ExpressJS中.
用户可以使用他们想要的任何会话ID.也许有人觉得他们应该使用SQL数据库中的自动递增数字,这没关系,因为我们通过签署值来保护他们不知情的决定,延长密钥.