Open diveDylan opened 4 years ago
Cookie是一个请求头部,一般是服务器在返回Headers中set-cookie后,客户端的后续的请求都会默认带上cookie 这个请求头。
Cookie
Headers
set-cookie
cookie
response.setCookie(key, value) request.header.cookie = value
1、保持会话状态, 因为http请求是无状态的,cookie的出现使我们可以保持用户的登录状态、购物车状态等其他信息我们应用应该保存的状态 2、个性化服务,`cookie`常用于代表千人千面的登录标识,而我们可以通过这个千人千面的特性提供个性化服务 3、追踪和分析用户行为,根据`cookie`的标识追踪分析不同用户行为
一个cookie通常含有一下属性domain<string>、expirationDate< number >(optional)、firstPartyDomain<string>、hostOnly<boolean>、httpOnly< boolean>、name<string、 path <string>、 secure<boolean> 、session<boolean>、sameSite<enumString> 、storeId<string>、 value<string>
domain<string>
expirationDate< number >
firstPartyDomain<string>
hostOnly<boolean>
httpOnly< boolean>
name<string
path <string>
secure<boolean>
session<boolean>
sameSite<enumString>
storeId<string>
value<string>
目前普遍有形式,一种是会话期Cookie另一种是持久性cookie 会话期cookie在仅存在浏览器会话期间,关闭浏览器会自动删除。 持久性cookie需要指定一个失效时间,即我们常说的Expires和Max-Age
Expires
Max-Age
// api // newCookie是一个键值对形式的字符串。需要注意的是,用这个方法一次只能对一个cookie进行设置或更新。 document.cookie = encodeURIComponent(<key>)=encodeURIComponent(<value>); max-age=<max-age-in-seconds>; expires=<date-in-GMTString-format>; // js date.toUTCString() path=<path>; domain=<domain>; secure=<Boolean>
安全型有两个策略属性Secure和httpOnly
Secure
httpOnly
标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过Cookie传输,因为Cookie有其固有的不安全性,Secure 标记也无法提供确实的安全保障。从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)无法使用Cookie的 Secure 标记
而标记httpOnly之后客户端没有办法通过js脚步访问cookie,比如像document.cookie等api,这是有效避免XSS脚本攻击的做法之一
document.cookie
XSS
// server action Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
Domain属性将标记cookie的所属域,不属于该域名的属性将无法访问cookie。值得注意的是子域名可以访问该cookie, 域名的阅读是从右到左
Domain
Path 标识指定了主机下的哪些路径可以接受Cookie(该URL路径必须存在于请求URL中)。以字符 %x2F ("/") 作为路径分隔符,子路径也会被匹配
<Domain>developer.mozilla.org org---TLD顶级域名,地区顶级域名us,sh,政府机关顶级域名gov,机构组织顶级域名org,edu [mozilla, developer] ---label标签 ----mozilla--->SLD二级域名,紧跟TLD的为二级域名 ----developer --->三级域名 Domain=mozilla.org includes subDomain<developer.mozilla.org>
SameSite属性作为cookie的属性之一,允许您声明是否应将Cookie限制为第一方或同一站点上下文 `Lax`: <default> Cookies允许与顶级一起发送,并将与第三方网站发起的GET请求一起发送。这是浏览器中的默认值 exmaple link: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies#First-party_isolation
SameSite属性作为cookie的属性之一,允许您声明是否应将Cookie限制为第一方或同一站点上下文
`Lax`: <default> Cookies允许与顶级一起发送,并将与第三方网站发起的GET请求一起发送。这是浏览器中的默认值 exmaple link: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies#First-party_isolation
----in a.com, img src b.com(get request set b.com<domain> cookie) send b.comcookie is allowed
a.com
b.com
b.com<domain>
Strict Cookie只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送
Strict
None Cookie将在所有上下文中发送,即允许跨域发送
None
更多sameSite资料查阅: [SameSite](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie/SameSite) 相关资料 [http-cookie](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies) [domain-name](https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_domain_name) [cookie](https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/cookies/Cookie)
Cookie
是一个请求头部,一般是服务器在返回Headers
中set-cookie
后,客户端的后续的请求都会默认带上cookie
这个请求头。作用
cookie 一些属性
一个
cookie
通常含有一下属性domain<string>
、expirationDate< number >
(optional)、firstPartyDomain<string>
、hostOnly<boolean>
、httpOnly< boolean>
、name<string
、path <string>
、secure<boolean>
、session<boolean>
、sameSite<enumString>
、storeId<string>
、value<string>
持久型、会话型
目前普遍有形式,一种是会话期Cookie另一种是持久性cookie 会话期cookie在仅存在浏览器会话期间,关闭浏览器会自动删除。 持久性cookie需要指定一个失效时间,即我们常说的
Expires
和Max-Age
安全性
安全型有两个策略属性
Secure
和httpOnly
而标记
httpOnly
之后客户端没有办法通过js脚步访问cookie
,比如像document.cookie
等api,这是有效避免XSS
脚本攻击的做法之一Domain
Domain
属性将标记cookie
的所属域,不属于该域名的属性将无法访问cookie
。值得注意的是子域名可以访问该cookie
, 域名的阅读是从右到左sameSite
----in
a.com
, img srcb.com
(get request setb.com<domain>
cookie) sendb.com
cookie is allowedStrict
Cookie只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送None
Cookie将在所有上下文中发送,即允许跨域发送