前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你必须知道的session与cookie

你必须知道的session与cookie

作者头像
磊哥
发布2018-05-08 10:50:03
9540
发布2018-05-08 10:50:03
举报
文章被收录于专栏:王磊的博客王磊的博客

Session本质

提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的,而http协议本身是无状态的,那么问题来了服务器端是怎么验证客户端身份的?

:服务器端和客户端验证的联系就是sessionid,登录成功之后服务器会自动给客户端一个session标识也就是sessionid,而sessionid会存储到客户端的cookie里面,每次请求的时候都会带上这个标识,用来让服务器端验证身份的。服务器端的sessionid一般是存储在内存中的,通过某种算法加密存储到服务器上,客户端就存储到cookie里面,当页面关闭的时候客户端的sessionid就会消失,而服务器端的session不会因为客户端的消失而关闭,而是通过他本身设置过期时间之后,才会失效。

总结来说,session本身就是通过存储在客户端的sessionid进行身份验证。

那么问题来了,如果客户端的sessionid被读取到,就可以伪装身份,对系统进行破坏了,这就是存储型XSS了,那怎么来处理怎么问题呢?这就是接下来要说的Cookie了。

Cookie属性HttpOnly

定义:如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性。

解释:也就是说服务器端设置了HttpOnly之后,客户端是无法通过document.cookie获取到cookie值了,这样就有效的缓解了XSS攻击。

服务器设置HttpOnly方法:

asp.net:

代码语言:javascript
复制
HttpCookie myCookie = new HttpCookie("myCookie");  
myCookie.HttpOnly = true;  
Response.AppendCookie(myCookie);

express(nodejs):

代码语言:javascript
复制
res.cookie('rememberme', '1', {httpOnly: true });  

然而,设置HttpOnly只能一定程度的阻止XSS,如果http在传输过程中被劫持了,该怎样处理这个问题呢?那就是接下来要说的Cookie的另一个属性Secure了。

Cookie属性Secure

定义:当Secure属性设置为true时,cookie只有在https协议下才能上传到服务器,而在http协议下是没法上传的,所以也不会被窃听。

解释:当Secure=true时,客户端的Cookie是不会上传到服务器端的(http协议)。

asp.net

代码语言:javascript
复制
HttpCookie myCookie = new HttpCookie("myCookie");  
//...
myCookie.SecurePolicy = CookieSecurePolicy.Always;
Response.AppendCookie(myCookie);

express(nodejs)

代码语言:javascript
复制
var app = express()
var sess = {
  secret: 'keyboard cat',
  cookie: {}
}

if (app.get('env') === 'production') {
  app.set('trust proxy', 1) // trust first proxy
  sess.cookie.secure = true // serve secure cookies
}

app.use(session(sess))

参考资料:https://github.com/expressjs/session

末尾

到此,本文已到尾声,主要介绍了Session的原理,以及Cookie两个非常重要的安全属性的设置(HttpOnly/Secure),能力有限,不足之处,欢迎各位斧正~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Session本质
  • Cookie属性HttpOnly
  • Cookie属性Secure
  • 末尾
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档