Cookie的安全往往被程序员们所忽视,首先来了解一下Cookie是什么?
背景:
程序员们用Session在服务端保存着和用户相关的信息,当用户退出时,或关闭浏览器时session就失效了,这时程序员们希望通过用户每次请求时所带的一些数据来识别之前登录过的用户,于是在用户的浏览器中就出现了Cookie。
用途:
Cookie中往往存储着和用户相关的信息,这些信息有时可以标识着一个身份,请求跨站伪造(CSRF)就是利用了Cookie代表着一个用户的特性,因为在浏览器中,通过一些方法,我们可以修改请求中的cookie,如果改成了和一个已经登录且生效的用户的cookie一样,那系统就会误认为我就是那个已经登录的那个人,而事实我却并没有输入什么用户名密码登录。
那么如何伪造Cookie呢?其实这是跨站脚本攻击(XSS)的目的,用一个脚本来获取别人正在使用的Cookie,再通过邮件或其他方式,将获取到的Cookie发送给攻击者。获取cookie的JS很简单:
var mycookie = document.cookie;写cookie的话也很简单:
document.cookie='key=value;'
如何防范:
要想让Cookie安全还是有方法的,首先要了解Cookie有哪些属性:
Name:Cookie的名字
Value:Cookie的值
Domain:Cookie作用在哪个域名下
Path:Cookie作用在什么上下文
Expires:有效时间
HTTP:httponly,防止JS获取,只作用在传输过程中
Secure:是否只作用在HTTPS的方式下
通过设置httponly属性可以防止cookie被别人窃取伪造,对于HTTPS的接口,最好还要设置Secure也为true。
注意事项:
很少有程序员重视cookie的安全性,更不重视Cookie的httponly功能,导致了大量的用户受到甚至财产上的损失。
还有要注意的是Cookie是有作用域和作用上下文的,如果作用域和作用上下文设置不当,服务端是取不到值的,这个在做APP时会常遇到,就是在APP设置了cookie时,在服务端没生效,因为没取到。