1、简介
基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie打出cookie的内容。Secure属性是说如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务器,用http协议是不发送的。会话cookie中缺少Secure属性会导致攻击者可以通过非HTTPS页面窃取到用户的cookie信息,造成用户cookie信息的泄露。cookie中的Secure指的是安全性。通过设定cookie中的Secure,可以指定cookie是否只能通过https协议访问。一般的cookie使用HTTP协议既可访问,如果启用Secure属性,则浏览器仅仅会在HTTPS请求中向服务端发送cookie内容。在WEB应用中,对于敏感业务,如:登录或者付款,需要使用HTTPS来保证内容的传输安全,而在用户成功获得授权之后,获得的客户端身份cookie如果没有设置为Secure,那么很有可能会被非HTTPS页面拿到,从而造成重要的身份泄露。
2、Cookie常用属性
一个Cookie包含以下信息:
Cookie名称,Cookie名称必须使用只能用在URL中的字符,一般用字母及数字,不能包含特殊字符,如有特殊字符想要转码。如js操作cookie的时候可以使用escape()对名称转码。
Cookie值,Cookie值同理Cookie的名称,可以进行转码和加密。
Expires,过期日期,一个GMT格式的时间,当过了这个日期之后,浏览器就会将这个Cookie删除掉,当不设置这个的时候,Cookie在浏览器关闭后消失。
Path,一个路径,在这个路径下面的页面才可以访问该Cookie,一般设为“/”,以表示同一个站点的所有页面都可以访问这个Cookie。
Domain,子域,指定在该子域下才可以访问Cookie,例如要让Cookie在a.test.com下可以访问,但在b.test.com下不能访问,则可将domain设置成a.test.com。
Secure,安全性,指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议既可访问,如果设置了Secure(没有值),则只有当使用https协议连接时cookie才可以被页面访问。
HttpOnly,如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息。

注意:上图为在w3shool上为setcookie语法,并没有显示7 httponly哦,各自版本支持问题。
3、属性说明
secure属性当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
HttpOnly属性如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。
4、两种实现方式
1、使用 add_header
An easy way to set cookie flag as HTTPOnly and Secure in Set-Cookie HTTP response header. Take a backup of the necessary configuration file and add the following in nginx.conf under http block.
在 HTTP 返回头中修改 HTTPOnly
和 Secure
是一个比较简单的方法。请备份 nginx 的配置文件,然后在 http 下添加以下内容:
add_header Set-Cookie "Path=/; HttpOnly; Secure";重启 Nginx 检查结果。
2、使用 proxy_cookie_path
另一种选择是在ssl.conf或default.conf中添加下面的语法:
proxy_cookie_path / "/; HTTPOnly; Secure";重启 Nginx 检查结果。
欢迎大家扫码关注:

本公众号只写原创,不接广告、不接广告、不接广告。下期小伙伴想学习什么技术,可以私信发我吆。





