Web 应用最安全的会话实现和保持方式是什么?_web实现会话管理,安全风险

目录

什么是会话管理

保障会话安全的关键

什么是 Set-Cookie

Set-Cookie header 头

基于 Set-Cookie 实现会话管理示例


什么是会话管理

什么是会话管理?

会话管理是一种在无状态的 HTTP 协议上保持用户状态的技术, Web 服务器通过会话管理可以识别和跟踪用户的请求。

为什么需要会话管理?

由于 HTTP 协议本身不保存状态信息,所以服务器需要一种机制来区分不同用户的请求,以及在多个请求之间保持用户的状态信息。

会话创建

会话信息应该由服务器端创建,服务器端创建会话 ID 以及会话信息后存储起来,将会话 ID 返回给 Web 客户端存储。会话 ID应 该是随机的、不可预测的,并且有足够的熵。会话 ID 通常是通过安全的随机数生成算法生成。客户端和服务器通信的时候带上会话 ID,这样服务器就可以识别和跟踪用户的请求了。

文章持续更新中,微信搜索【路多辛】阅读更多优质文章

保障会话安全的关键

可以看出会话管理安全的关键主要在于两个点:

  • 客户端和服务端需要安全通信, 以保障会话 ID 的传输安全;
  • Web 端需要做安全存储会话 ID,不能被 JS 脚本任意读取,以防止 CSS 攻击。

针对第一点,可以使用 HTTPS 协议来解决。针对第二点,可以使用 Set-Cookie 机制来解决。

什么是 Set-Cookie

Set-Cookie 是 HTTP 协议的一个 header 字段,由服务器端返回给客户端(通常是浏览器),用于在客户端创建一个 cookie。Cookie 通常用于保存用户会话信息。Set-Cookie 的工作机制如下:

  1. 服务器响应设置 Cookie:
    当服务器希望在客户端设置一个 cookie 时,在 HTTP 响应中包含一个 Set-Cookie header 头,包含 cookie 的名称、值以及一些可选的属性,比如 Expires、Max-Age、Domain、Path、Secure 和 HttpOnly 等。
  2. 客户端存储 Cookie:
    浏览器接收到 Set-Cookie header 头后,会根据服务器指定的属性存储这个 cookie。如果设置了 Expires 或 Max-Age 属性,浏览器会根据这些值决定 cookie 的有效期。如果没有设置这些属性,cookie 通常为会话 cookie,意味着当浏览器关闭时 cookie 会被删除。
  3. 客户端发送 Cookie:
    一旦 cookie 被存储,浏览器会在随后对同一服务器的每个请求中自动包含这个 cookie,前提是这些请求匹配了 cookie 的 Domain 和 Path 属性。
  4. 服务器读取 Cookie:
    服务器可以通过读取请求中的 Cookie header 头来获取之前设置的 cookie 信息。这样服务器就可以恢复用户的会话状态,如登录信息、用户偏好设置等。

Set-Cookie header 头

Set-Cookie 的值一般包含以下几个部分:

  • name=value:指定 cookie 的名称和值。
  • Expires:定义了 cookie 的过期时间,是一个具体的日期和时间。在这之后,cookie 将不再被存储或发送。如果没有设置 Expires,cookie 将是一个会话 cookie,意味着将在浏览器关闭时被删除。
  • Max-Age:指定从当前时间开始,cookie 存活的秒数。如果同时指定了 Expires 和 Max-Age,Max-Age 的优先级更高。
  • Domain:指定哪些域名可以接收 cookie。如果未指定,默认为当前文档的域名。如果指定了 Domain,那么子域名也会包含这个 cookie。
  • Path:指定了 cookie 的适用路径。只有请求的路径与此匹配时,cookie 才会被发送。
  • Secure:这个指令告诉浏览器只在 HTTPS 连接时发送 cookie。
  • HttpOnly:限制 JavaScript 通过 Document.cookie API 访问 cookie,有助于减少跨站脚本攻击(XSS)的风险。
  • SameSite:限制第三方请求中 Cookie 的发送。SameSite 可以设置为以下几个值:
  • Strict: Cookie 只会在请求是从同一站点发起的时候发送。
  • Lax: Cookie 对于导航到目标网站的 GET 请求会被发送,例如用户通过链接导航到网站。
  • None: 只有在设置了 Secure 属性的情况下,Cookie 才会在所有请求中被发送,包括跨站点请求。

一个典型的 Set-Cookie 信息例子:

Set-Cookie: name=value; Path=/; Domain=xx.com; Max-Age=3600; Secure; HttpOnly

基于 Set-Cookie 实现会话管理示例

原理如如下:

实现示意图

HTML 示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Set Cookie Example</title>
</head>
<body>
<form action="/submit" method="post">
    <label for="username">账号:</label>
    <input type="text" id="username" name="username">
    <label for="password">密码:</label>
    <input type="text" id="password" name="password">
    <input type="submit">
</form>
</body>
</html>

Golang 示例代码如下:

package main

import (
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

![img](https://img-blog.csdnimg.cn/img_convert/85db1b7ce5fc2c7581cfefaf8155cc7b.png)

![img](https://img-blog.csdnimg.cn/img_convert/e5670fa3838ab9c534600cf58430b973.png)

![img](https://img-blog.csdnimg.cn/img_convert/84ea83f44d21fd90955c297e27bbdd66.png)

![img](https://img-blog.csdnimg.cn/img_convert/d542845db2d481aa68205103e9a52776.png)

![img](https://img-blog.csdnimg.cn/img_convert/ca94236c44e2feb7d02814b845fc2bdd.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

5%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值