最近一直被找工作这件事弄得心烦意乱,因此对于django的学习耽搁了不少,趁今晚比较闲,把这篇补上。
原文链接:转载请注明。
本文分为几部分来进行介绍:
- django中session与cookie的概念,以及相互之间的关系;
- session id的作用;
- session id被盗可能会引起的危害;
- 如何避免危害的发生。
django中session与cookie的概念
我的理解,session与Cookie都可以称作是一种缓存,其存在的最大目的都是为了减少用户request与response之间的时间损耗,提高用户的浏览体验。
Cookies
cookies 是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies。它保存在浏览器下的某个文件夹下。
Session
Django的Session机制会向请求的浏览器发送cookie字符串。同时也会保存到本地一份,用来验证浏览器登录是否为同一用户。它存在于服务器,Django默认会把session存入到数据库中。
Session依赖于Cookie,如果浏览器不能保存cooki那么session就失效了。因为它需要浏览器的cooki值去session里做对比。 session就是用来在服务器端保存用户的会话状态。由于session是保存在服务器端的,所以用户永远不可能拿到session内的具体内容。
session id的作用
session id是保存在cookie中的一个随机字符串。服务器通过查看用户cookie中的session id信息,获取id,来与session中的用户名进行比对,比对成功,则说明认证通过,可进行其他的操作。
id被盗可能会导致的问题
由于session id是保存在cookie中,而cookie是保存在客户端,因此session id并不安全,如果被不法用户盗取cookie,伪造用户进行登录操作,获得更高的权限,进而对用户账户,或网站造成更大的损害。
如何避免
解决这个的问题有以下几个方面:
- 敏感操作需要用户输入密码来进行二次认证;
- 网站https化,提高消息传递过程中的安全系数;
- 类似oauth,用户使用一个私钥来对参数进行hash,这样即便cookie被盗,也会因为没有私钥而无法获知session id;
由于django中的SESSION_COOKIE_HTTPONLY默认值为True,只能通过http协议来读取,而不能通过js来实现对cookie的窃取。因此不用对此安全性过分担心。
以上就是我对于session id的全部理解,欢迎大家跟我讨论~
参考资料: