cookie安全小知识

一、背景

cookie作为浏览器端存储客户相关信息的重要载体,在为我们开发提供方便的同时,也埋下了一些安全隐患。如果在使用过程中不注意,就有可能被图谋不轨者利用起来,造成安全事故。

 

二、cookie的作用域

浏览器每次发送请求时,会根据请求的地址,来判断自身是否存储了符合作用域规则的cookie,如果有,则会将cookie一起发送给服务端。

所谓作用域规则,是指:

假设某个cookie名为test,

设置的domain为 :

.cnblogs.com

设置的path为:

/pathtest

那么,能够访问到该cookie的服务地址为:

cnblogs.com
i.cnblogs.com 等子域

同时,访问的路径必须为:

/pathtest/* 等子路径

超出这个范围的路径与域名,浏览器在发送请求时,是不会cookie-test发送出去的。

 

三、cookie的属性安全设置

1、设置secrue属性为true

在设置了该属性后,浏览器只会对于https的请求带上cookie,而http请求是不会带上cookie信息的。如果cookie中存在敏感信息,那么就很有必要设置该属性,这样即便cookie被中间人窃取了,也不会泄露明文信息。

 

2、设置httponly属性为true

通过设置该属性,cookie将不可被js脚本读取,从而无法在客户端泄露出cookie。不过对于服务端,我们也需要禁止回应 http trace方法,否则黑客还是可以通过该途径窃取cookie(该方法常用来debug,服务端会将收到的请求原封不动的回复给客户端,自然也包含了cookie信息)

 

3、设置samesite 属性

由Chrome51版本只会浏览器在支持,通过该属性,可以防止不同domain下的请求带上原网址的cookie,它的可选值为:

strict 、lax、none

当设置为strict时,只有当前网页地址与cookie的设定完全一致时,才会发送cookie ,也就是说,如果我在B网站,哪怕是直接点击了某个链接到A网站的地址,这时候浏览器向A发送请求时,是不会带上cookie的,这样,能够有效的预防CSRF攻击。

当设置为 lax 的时候,能够允许get请求中带上cookie,但是post是不行的。

 

4、设置HostOnly属性为true

通过该属性,可以设置cookie是否可以被子域所共享。

 

参考链接:

cookie的同源策略与作用域:https://www.cnblogs.com/liaojie970/p/7606168.html

cookie安全属性:https://techblog.topdesk.com/security/cookie-security/

posted @ 2020-07-25 12:25  sliec  阅读(754)  评论(0编辑  收藏  举报