Cookie和会话安全,编码方式及其密文特征

发布时间:2024年01月17日

(本文章仅支持本人学习使用,若造成不良影响,与本人无关!)

Cookie

????????Cookie 是 Web 服务端发送给用户浏览器的一小段数据,浏览器会存储这些数据,并在后续发往服务器的请求中带上它们。

????????Cookie 是一种将数据存储在客户端的方式,我们可以通过 Cookie 将用户标识存储在客户端,也有一些很老的 Web 应用是使用 URL 参数来存储这个标识的。但是将用户标识存放在 Cookie 或 URL 参数中都有个问题:在浏览器端,用户可以查看和篡改这些数据。

????????如果 Web 应用希望存储一些敏感数据或不希望被用户篡改的数据,最好的办法是将数据存储在服务端,并且为该用户的数据分配一个随机的 ID,在客户端仅存储这个 ID,然后用户每次访问服务器都要带上这个 ID,服务端用这个 ID 去查已存储的数据就知道当前的访问者是谁。

image-20240115000742503

????????在这个过程中,服务端存储的这份数据称为 Session,分配给客户端的这个随机 ID 称为SessionID。在大多数场景中,SessionID 都是通过 Cookie 分发给客户端的,然后客户端每次访问服务器都会带上这个 Cookie。在一些很老的手机 WAP 应用中,考虑到有些功能机的浏览器不支持 Cookie,也有通过 URL 参数传输 SessionID 的,但现在已经非常少见了。

第一方 Cookie 和第三方 Cookie

image-20240115001427573

所有浏览器都会接受第一方 Cookie,但是浏览器的隐私策略可能会阻止部分第三方 Cookie。

cookie属性

Domain 属性用于指定 Cookie 在哪些域名中生效,即访问哪些域名时浏览器会发送这个Cookie,该属性也决定了哪些域名的网页可以通过 JavaScript 访问这个 Cookie。如果域名前面带一个点号“.”表示该 Cookie 对当前域名及其子域名都有效,浏览器访问这些子域名时都会带上这个 Cookie; 如果域名前不带点号,表示 Cookie 仅对当前域名有效。

Path 属性用于指定 Cookie 的生效路径,只有访问这个路径或其子路径时,浏览器才会发送这个 Cookie。如不设置,Path 属性的默认值就是当前页面所在的路径。如果一个域名中不同路径有很多不同的应用,同名的 Cookie 会造成干扰,这时可以设置 Cookie 的 Path 属性将它们区分开来。

Expires 属性来设置 Cookie 的有效期,浏览器会在这个 Cookie 到期后自动将其删除。没有指定 Expires 属性的 Cookie 叫“临时 Cookie”,关掉浏览器后将自动删除。有些地方也将临时 Cookie 称为“会话 Cokie”,即仅在当前会话中有效,可以实现关掉浏览器就自动结束会话,下次再打开网站则需要重新登录。

HttpOnly 属性的作用是让 Cookie 只能用于HTTP/HTTPS 传输,客户端JavaScript 无法读取它,从而在一定程度上减少了 XSS 漏洞带来的危害。

Secure 属性:给 Cookie 设置 Secure 属性后,该 Cookie 只会在 HTTPS 请求中被发送给服务器,非加密的HTTP 请求是不会发送该 Cookie 的,确保了它不会在网络中以明文传输。同时,在客户端通过 JavaScript 设置 Cookie,或者在服务端通过 Set-Cookie 头来设置 Cookie时,如果当前网站用的是 HTTP 协议,写入带 Secure 属性的 Cookie 会失败。

SameSite 是一个新的安全属性,服务端在 Set-Cookie 响应头中通过 SameSite 属性指示是否可以在跨站请求中发送该 Cookie,即它能不能作为第三方 Cookie。

这个属性有 3 种值:

  1. None 不做限制,任何场景下都会发送 Cookie。

  2. LAX 在普通的跨站请求中都不发送 Cookie,但是导航到其他网站时(如点击链接)会发送 Cookie另外,在跨站点提交表单的场景中,只有 GET 方法提交的表单会带 Cookie,使用 POST 提交表单时不会带 Cookie。当 Cookie 没有指定 SameSite 属性时,现代浏览器的表现与 SameSite=Lax时一致。

  3. Strict SameSite 属性为 Strict 表示严格模式,即完全禁止在跨站请求中发送 Cookie,即使点击站外链接也不会发送 Cookie,只有当请求的站点与浏览器地址栏 URL 中的域名属于同一个站点(即“第一方”站点) 时,才会发送 Cookie。这是非常严格的跨站点策略,假如用户已经登录 A网站,他在 B 网站点击链接跳转到 A 网站时,也不会带上 A 网站的 Cokie,此时 A 网站还是给用户展示未登录页面

会话管理

会话ID的随机性:会话ID(SessionID)最基本的要求是随机性,让攻击者无法猜测出来。所以,不能简单地使用用户的ID、时间戳等数据作为 SessionID,也不能基于用户的公开信息简单计算出一个值。同时,SessionID 也要足够长,以防止攻击者通过遍历穷举的方法获取 SessionID。

过期和失效:很多比较敏感的应用都有超时自动退出账号的机制,大多数有“记住登录状态”功能的应用也会有超时机制,只是这个超时时间设置得比较长。

绑定客户端:在应用中、如果将会话与客户端绑定会更安全,因为即使攻击者窃取了 SessionID,也无法在新的设备中登录目标网站。

安全传输:现代Web 应用基本上都是将 SessionID 写入 Cookie 中,所以设置相应 Cookie 的安全属性非常重要,大多数情况下建议开启 HttpOnly和Secure 属性。

客户端存储会话:前面讲的会话案例全部是会话存储在服务端的场录,客户端只保存一个很短的 SessionID,也有一些应用将会话存储在客户端,最典型的就是将JWT(JSON Web Token) 用下会话管理。

利用HackBar使用其他浏览器Cookies登录

1.虚拟机打开靶场,查看IP,打开DVWA。

2.进入DVWA“fn+F12",查cookier信息。

3.打开另一个浏览器,打开dvwa不登陆,“fn+F12"打开hackbar.

4."load url"输入cookie:name=value,修改为“index","execute"

5.不输入用户名 密码便可登录成功。

MD5、sha1、HMAC算法、NTLM等相似加密类型

1.MD5

一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串

2.sha1

这种加密的密文特征与MD5相似,只不过位数是40

3.HMAC算法

HMAC (Hash-based Message Authentication Code) 常用于接口签名验证,这种算法就是在前两种加密的基础上引入了秘钥,而秘钥又只有传输双方才知道,所以基本上是破解不了的

4.NTLM

这种加密是Windows的哈希密码,是 Windows NT 早期版本的标准安全协议。与它相同的还有Domain Cached Credentials(域哈希)。

相似加密类型
#算法长度
1md532/16
2sha140
3sha25664
4sha512128
5adler328
6crc328
7crc32b8
8fnv1328
9fnv16416
10fnv1a328
11fnv1a6416
12gost64
13gost-crypto64
14haval128,332
15haval128,432
16haval128,532
17haval160,340
18haval160,440
19haval160,540
20haval192,348
21haval192,448
22haval192,548
23haval224,356
24haval224,456
25haval224,556
26haval256,364
27haval256,464
28haval256,564
29joaat8
30md232
31md432
32ripemd12832
33ripemd16040
34ripemd25664
35ripemd32080
36sha22456
37sha3-22456
38sha3-25664
39sha3-38496
40sha3-512128
41sha38496
42sha512/22456
43sha512/25664
44snefru64
45snefru25664
46tiger128,332
47tiger128,432
48tiger160,340
49tiger160,440
50tiger192,348
51tiger192,448
52whirlpool128
53mysql老MYSQL数据库用的,16位,且第1位和第7位必须为0-8
54mysql540
55NTLM32
56Domain Cached Credentials32

Base64、Base58、Base32、Base16、Base85、Base100等相似加密类型

1.Base64

一般情况下密文尾部都会有两个等号,明文很少的时候则没有

2、Base58

示例6tmHCZvhgfNjQu

它最大的特点是没有等号,相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号。0(数字0)、O(o的大写字母)、l( L的小写字母)、I(i的大写字母)

3、Base32

示例GEZDGNBVGY3TQOJQGE======

他的特点是明文超过十个后面就会有很多等号

4、Base16

示例61646D696E

它的特点是没有等号并且数字要多于字母

5、Base85

示例@:X4hDWe0rkE(G[OdP4CT]N#

特点是奇怪的字符比较多,但是很难出现等号

6、Base100

示例👘👛👤👠👥

特点就是一堆Emoji表情

AES、DES、RC4、Rabbit、Triple DES(3DES)

这些都是非对称性加密算法,就是引入了密钥,密文特征与Base64类似,放个图,就不多说了

img

Unicode、HTML实体编码、16进制Unicode

可以说Unicode与HTML实体编码是一个东西

Unicode与HTML实体编码、16进制Unicode

示例\u8fd9\u662f\u4e00

img

???

Escape编码/加密、Unescape解码/解密、%u编码、%u解码

特征:以%u开头

Escape/Unescape加密解码/编码解码,又叫%u编码。Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u。Unescape解码/解密,就是去掉"%u"后,将16进制字符还原后,由utf-16转码到自己目标字符。

文章来源:https://blog.csdn.net/weixin_62638332/article/details/135627488
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。