当前位置: 首页 > news >正文

安溪住房和城乡建设网站iis 发布织梦网站

安溪住房和城乡建设网站,iis 发布织梦网站,重庆专业建网站,找资源什么是会话固定以及如何在 Node.js 中防止它 在深入讨论之前,我们需要了解会话是什么以及会话身份验证如何工作。 什么是会话? 正如我们所知,HTTP 请求是无状态的,这意味着当我们发送登录请求时,并且我们有有效的用…

什么是会话固定以及如何在 Node.js 中防止它

在深入讨论之前,我们需要了解会话是什么以及会话身份验证如何工作。

什么是会话?

正如我们所知,HTTP 请求是无状态的,这意味着当我们发送登录请求时,并且我们有有效的用户名和密码,没有默认机制可以知道我们是发送下一个请求的同一个人。为了解决这个问题,换句话说,使请求有状态,有一些常用的方法,如Cookie、隐藏表单字段、URL 参数、浏览器存储、JWTSession。在本文中,我们将重点关注Session

Session是存储在服务器上的数据。每个客户端都会获得一个与服务器上的数据相关的唯一标识符 。客户端必须在每个请求上发送此唯一标识符,以便我们知道谁发送了此请求。该标识符可以在 cookieURL 参数中发送。

下面是使用express-sessionexpress创建session的简单示例:

const app = require('express')();
const session = require('express-session');
app.use(require('cookie-parser')());
app.use(require('body-parser').json());app.use(session({secret: 'secret',cookie: { maxAge: 60000 },name: 'sessionId'
}));app.get('/', (req, res) => {res.send('ping');
});app.listen(3000, () => {console.log('Server is running on port 3000');
});

当第一次发送请求时,express-session中间件会创建一个新的唯一标识符,并将其设置为 cookie 后再将其存储在某处(在本例中为内存,但我们也可以传递自定义存储)。在会话中间件的选项中,我们使用了sessionId存储此唯一标识符的密钥名称。现在,如果我们发送请求,我们会看到如下内容:

在这里插入图片描述
浏览器现在设置此 cookie 并自动存储它以供进一步请求。如果我们发送包含有效会话的请求(该会话存在于我们的会话存储中 - 在本例中为内存),在响应中获取标头的标头就不再包含Set-Cookie字段了:

在这里插入图片描述
当用户登录时,我们可以将用户信息存储在 cookie 中(序列化),也可以将其存储在数据库中并将数据与sessionId进行绑定. 让我们使用 Map 作为我们的简单数据库:

const db = new Map();
app.get('/me', (req, res) => {const user = db.get(req.sessionID);res.json({ mySessionId: req.sessionID, me: user ? user : 'anonymous' });
});
const users = [{ name: 'leo', age: 19 }, { name: 'joe', age: 20 }];
app.post('/login', (req, res) => {const { name } = req.body;const user = users.find(u => u.name === name);if (user) {db.set(req.sessionID, user);res.send('ok');} else {res.send('try again');}
});

攻击者可以创建有效的会话 ID 吗?

在本例中,我们使用的是express-session。可以看到我们向express-session中间件传递了一个secret值。这个secret用于签署我们的 cookie 的值。它只是意味着我们确信是我们生成了sessionId

session示例:

sessionId=s%3AL6j4T8hBwMk1ulJqGoisZbAxUOkOuQqP.x5UxPQEtKrj3sWrIy6S01CQRjAtp4biVs4H2zgqmSs

第一部分:s%3A简单来说:s:这是一个前缀,表明我们的 cookie 会话已签名!

第二部分:L6j4T8hBwMk1ulJqGoisZbAxUOkOuQqP这是我们的sessionId,我们在数据库中使用它来关联数据。

第三部分:x5UxPQEtKrj3sWrIy6S01CQRjAtp4biVs4H2zgqmSs这是签字部分。我们使用我们的secret生成了此文本,因此我们可以确定此 cookie 是由我们生成的。

我们可以简单地重新生成这个标志并检查它是否有效:

const crypto = require('crypto');
const secret = 'secret';
const sessionId = 'L6j4T8hBwMk1ulJqGoisZbAxUOkOuQqP';
const hmac = crypto.createHmac('sha256', secret);
hmac.update(sessionId);
const signature = hmac.digest('base64').replace(/\=+$/, '');
console.log(signature); // x5UxPQEtKrj3sWrIy6S01CQRjAtp4biVs4H2zgqmSs

什么是会话固定?

在会话固定攻击中,攻击者劫持有效的用户会话。我们说过,我们对 cookie 进行签名是为了确保没有人可以劫持其他用户的有效会话。但是,如果攻击者拥有自己的有效会话并尝试将其与另一个用户关联怎么办?在这种情况下,他可以代表受害者采取行动。

当我们没有在 Login 之类的操作上生成新的 sessionIds(唯一标识符)时,就会出现问题。

通过会话固定,攻击者可以劫持有效的用户会话,了解此漏洞并防范它绝对重要。

攻击者如何才能做到这一点?

其中一种情况是攻击者可以物理访问计算机。作为攻击者,我们可以选择一台共享计算机,打开某个已经登录过的网页,然后复制session后发送请求。

sessionId在有些网站在请求中作为 URL 参数传递。在这种情况下,如果攻击者使用其 URL 参数提供登录页面的链接,sessionId则有可能被利用。

如何防止会话固定?

登录时生成新会话

主要解决方案非常简单,通过这样做,始终可以确保不会发生此会话覆盖!

让我们改变代码:

app.post('/login', (req, res) => {const { name } = req.body;req.session.regenerate(err => {if (err) {res.send('error');} else {const user = users.find(u => u.name === name);if (user) {db.set(req.sessionID, user);res.send('ok');} else {res.send('try again');}}});
});

我们可以使用regenerate函数,以便每次有人想要登录时分配一个新的会话。无论我们是否传递会话cookie,它都会生成一个新的会话Id并将其发送到客户端中。

仅使用HTTP Only 的 Cookie

当我们使用HTTP Only时,这意味着只有服务器可以通过Set-Cookie标头设置cookie,而客户端(浏览器JavaScript)无法更改它。所以即使我们的应用存在XSS漏洞,攻击者也无法更改sessionIdcookie)。

防范 XSS

会话固定可以与 XSS 攻击结合使用,从而更加有效,因此如果我们担心会话固定,那么认真对待 XSS 攻击确实有意义。

合理的会话过期时间

会话过期时间应该符合我们的应用程序特定要求,如果我们更关心安全性,那么它应该更短,反之亦然。

正确的注销实施

注销时,我们必须正确销毁现有会话及其与任何数据的关联。否则,这些会话可以在注销后使用。(仅从客户端浏览器中删除 cookie 是不够的!)

http://www.yayakq.cn/news/344556/

相关文章:

  • 办公空间设计要素郑州seo网络营销技术
  • 经典微网站口碑的经典句子
  • 自助建站系统怎么用网页设计专业就业前景
  • 网站建设方案范文2000字wordpress高级模板下载
  • 泉州网站建设qzdziemlog转换wordpress
  • vps没问题访问不了网站北京网站制作策划
  • 汤姆叔叔官方网站建设南昌建设医院网站
  • 手机怎么自己建网站网上开店铺怎么样开
  • 广东省建设厅官方网站网址做网站是数据库应该放在哪里
  • 网站点击率怎么建wordpress首页打开很慢
  • 云南网站推广优化湛江wx
  • 网站做点击广告是怎么回事网站页面做海报用什么软件
  • 优质网站建设服务做海外网站 服务器放哪
  • 响应式网站一般怎么设计50000免费短视频素材
  • 广州站有高铁吗手机免费制作网站模板
  • 如何使用阿里云建设网站昭通市有做网站的吗
  • 网站建设方案书0wordpress怎样打开速度快
  • 网站备案号中信息有变北京营销型网站建设费用
  • 小游戏网站代码谷歌优化怎么做
  • php 网站缓存文件西安网站搭建公司
  • 惠州建站模板设计网站
  • php网站开发自学宁波做网站优化的公司
  • 免费的网站加速器网站登录不上去怎么回事
  • 网站织梦程序改成wordpress网站建设需求文章
  • 帮人做彩票网站支付接口如何做跨境购物网站
  • 江苏建设网站酒店装修合同范本上海城乡建设管理局网站
  • 学校 网站源码wordpress分享卡片插件
  • 做一个网站放网上要多少钱定州网站制作多少钱
  • 淮安新网站制作寿光网站建设开发
  • google网站打不开创网站