晚上学习了《深入浅出nodejs》的session章节,分享一些简单的收获和发现。
cookie可以用来记录状态,但是cookie由于前后端都可修改,因此对于敏感数据,cookie就不适用了。
对于敏感数据,session是更好的解决方案。
因为session全权由服务端控制,浏览器无法更改session。
利用cookie和session的技术,才可以将客户与服务器中数据库中的用户数据对应起来,有两种实现方式。
1.基于Cookie实现用户和数据的映射
2.通过查询字符串来实现浏览器端和服务器端数据的对应
Session与内存:高速缓存redis和Memcached
Session与安全:
1.私钥。
2.XSS,伪造用户登录,获取用户cookie,发送cookie到攻击者服务器,获取到用户的session口令,实现密码窃取。
通俗来说,现在世界上绝大多数网站,都是通过cookie+session的方式实现登录验证。
分析一下简书的cookies和session
cookies
1.其中的remember_user_token设置了remember me功能的过期时间
2.每次不同登录,_m7e_session会变化
3.remember_user_token和_m7e_session为HTTP Only,因此document.cookie无法读取到它们。
session Storage
1这里的session Storaage的值每次也会变。
2.值貌似和时间有关。
做个试验:登录完立即输入Date.now()
登录session value:1512136002
现在时间:1512136004287
由此可以看出,简书的session其实是以秒为单位,而不是毫秒数忽略不计,因为即使计了也没有意义,1000毫秒内多用户并发登录的情况是少数,即使有,阻塞时间也不会太长。用String.prototype.slice()方法即可实现。
例如上述的session value 1512136002,直接用"1512136002999".slice(0,-3)即可。此处的1512136002999是假设值。
回过头来分析一下XSS的原理:
浏览器执行了黑帽子黑客的脚本,将完整的cookie发送到了黑客的服务器,cookie包含document.cookie显示不出来,也就是http-only为真的敏感数据,包通过这个完整cookie,黑客就可以拿到正常服务器的Session口令。用户的完整cookie加上官方服务器的Session都已到手,登录访问还不是分分钟的事。
思考:
XSS技术,最关键的部分就是如何截取HTTP数据流中的用户Cookie信息,要知道document.cookie虽访问不到,但是发送到服务器必然是完整的cookie,所以如何用Javascript去获取这个Cookie,就成为了一键很有趣的事情
如何获取document.cookie中访问不到的cookie?
如何获取设置了http-only为true的cookie?
我也不知道...
That's it !
期待和大家交流,共同进步,欢迎大家加入我创建的与前端开发密切相关的技术讨论小组:
- SegmentFault技术圈:ES新规范语法糖
- SegmentFault专栏:趁你还年轻,做个优秀的前端工程师
- 知乎专栏:趁你还年轻,做个优秀的前端工程师
- Github博客: 趁你还年轻233的个人博客
- 前端开发交流群:660634678
努力成为优秀前端工程师!
网友评论