Web安全开发指南--会话管理
1、会话管理
3.1、会话管理安全规则
1 |
避免在URL携带session id。 |
2 |
使用SSL加密通道来传输cookie。 |
3 |
避免在错误信息和调试日志中记录session id。 |
4 |
使用框架自带的或业界公认的安全函数来生成session id(参考附录11.4)。 |
5 |
开发或引入无状态的模块(比如shipin7 nodejs和视频留言模块)时,应与web模块的session机制结合,防止越权或无授权攻击。 |
6 |
当使用加密通道SSL/TLS传输cookie时,为其设置“secure”属性。 |
7 |
如果客户端不需要读写cookie,为cookie设置“httponly”属性。 |
8 |
用户成功认证登录后为其生成新的session id。 |
9 |
为持久性cookie设置合理有效期(建议不超过3天)。 |
10 |
在任意页面的显眼地方提供用户注销的方法。 |
3.2、session有效期
简要描述 |
如果不为session设置有效期,攻击者就能够无限期地去猜解一个有效的session,进而使session遭到攻击。 |
|
解决方案 |
根据实际需求,为session设置一个合理的闲置注销时间,对于安全要求较高的场景,建议设置会话注销时间为5分钟; 根据实际需求,为session设置一个合理的会话最长有效期,当最长有效期到来时,强制注销当前session。 |
|
备注 |
|
|
3.3、session的注销和释放
简要描述 |
当用户关闭浏览器的标签页时,本地临时cookie不会马上释放掉,通常只有彻底关闭浏览器后保存在本地的cookie才会被释放。 |
|
解决方案 |
当用户从应用中注销时应执行以下操作: 在服务器端销毁session。 覆盖本地客户端的cookie。 |
|
备注 |
|
|
3.4、CSRF攻击的防御
简要描述 |
CSRF(跨站域请求伪造)攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作。 |
|
解决方案 |
使用验证码(安全性最强,但影响用户体验,不建议使用); 使用同步随机token(安全性强,请参考附录11.3.1); 在一个请求中分别在cookie和post请求数据中提交session id并在服务器做比对(安全性较强,请参考附录11.3.2); 检查http请求中referer的值(安全性偏强,参考附录11.3.3); |
|
备注 |
|
提示:如果IE显示不正常,请使用chrome浏览器