最近在学习cookie和session的基础知识,在这过程中涉及到cookie的安全性问题时总是很疑惑,很多文章都会涉及到安全性的问题,但是总是一句话带过,并没有详细说到底是怎么回事,比如我看到别人的观点:
服务器鉴别session需要至少从客户端传来一个session_id,session_id通常存于cookie中,或是url(很少用url,主要涉及安全性和SEO的影响)
所以在工程上session离了cookie基本没法用,但是cookie可以单独使用,不过cookies是明文存储,安全性很低,只使用cookie的话盗取了cookie基本就获取了用户所有权限。
亦或者
某个用户竟然在凭证上伪造了内容,让服务器哥误认为他是某个用户(这个时候凭证是明文,该起来非常方便),然后被伪造的那个用户的信息泄漏了
当我看到这些的时候总是不太清楚到底是怎么回事,以上面的例子为例,假如有人可以伪造cookie的内容那就算使用session,也可以有人伪造session_id啊,所以很疑惑。。
另外,大家可以具体讲下用户填写账号密码并提交表单后,服务器验证的具体过程吗?(是根据session_id从内存或者数据库中取出账号密码进行对比?)
感激不尽~
用于识别身份的cookie应该设置为HttpOnly,也就是禁止通过JS操作这个cookie,这样可以避免网站因为XSS漏洞而导致用户的cookie被XSS收集.
另一个方面,如果要防止cookie被中间人劫持,还得上HTTPS加密通信,这就得购买CA证书(受制于人)和配置Web服务器了,cookie里也有这个配置,就是secure,比如:
楼主还有一个疑问就是cookie怎么避免被伪造?
要搞清楚这个问题,就要了解cookie的认证过程:
可见因为有随机且唯一并经过哈希的盐(以及AES加密),所以cookie是很难伪造的.
根据cookie里的ID查询数据库用户表对应的盐,并与cookie中的盐比对,一致则通过用户身份认证.