Go Session4:Session劫持防范

cookieonly

设置SessionID的值只允许cookie设置,而不是通过URL重置方法设置,同时设置cookie的httponly为true。

属性httponly是设置是否可通过客户端脚本访问这个设置的cookie,可以防止这个cookie被XSS读取从而引起session劫持,cookie设置不会像URL重置方式那么容易获取SessionID。

token

在每个请求加上一个隐藏的token,然后每次验证这个token,从而保证用户的请求都是唯一的。

间隔生产新的SID

给session额外设置一个创建时间的值,一旦过了一定的时间,我们销毁这个sessionID,重新生成新的session,这样可以一定程度上防止session劫持的问题。

createtime := sess.Get("createtime")

if createtime == nil {

    sess.Set("createtime", time.Now().Unix())

} else if (createtime.(int64) + 60) < (time.Now().Unix()) {    // 设置60s过期

    globalSessions.SessionDestroy(w, r)

    sess = globalSessions.SessionStart(w, r)

}

1)session启动后,设置一个值记录生成sessionID的时间;

2)通过判断每次请求是否过期(60s)定期生成新的sessionID,这样使得获取有效sessionID的几率大大降低;

总结

上面的几种方式,可以在实践中消除session劫持的风险:

1) 由于sessionID频繁改变,使攻击者难有机会获取有效的sessionID;

2)因为sessionID只能在cookie中传递,然后设置了httponly,所以基于URL攻击的可能性为零,同时被XSS获取sessionID也不可能。

3)由于我们还设置了MaxAge=0,这样就相当于session cookie不会留在浏览器的历史记录里面。

你可能感兴趣的:(Go Session4:Session劫持防范)