认证与会话管理

认证与会话管理

认证和授权,实际上是两件事情,但是很多人会混淆这两个概念。

  • 认证的目的是为了认出用户是谁。
  • 授权的目的是为了决定用户能够做什么。

形象比喻

  • 用钥匙开门进屋,钥匙就是凭据。

  • 进屋能做什么,不能做什么,就是授权。房间主人可以卖房等,租客只能住。

问题:持有钥匙的人一定是主人吗?

  • 钥匙丢了,并被其他人捡到
  • 钥匙被复制了

总结:

  • 认证实际上就是一个验证凭据的过程。
  • 如果只有一个凭证被用于认证,称之为单因素认证。
  • 如果有两个或多个凭证被用于认证,称之为双因素或多因素认证。
  • 多因素认证强于单因素认证,但会使用户感觉麻烦。

密码策略

  • 长度(最好在16位以上)
  • 组合(大写字母、小写字母、数字、其他特殊符号混合,+-*/~#$%&()=?<>';等)
  • 不连续(123456,QWERRT...)
  • 不重复(111111,AABBCC)
  • 不用特殊数据(生日、姓名、学号,手机号等)
  • 独立(不同网站使用不同密码)

对于网站后台,需要将用户密码经过特殊加密再进行保存,即使数据泄露,也增加了对方攻击成本。

彩虹表:明文和hash值对应的表

对抗彩虹表,加盐(密码中参杂自定义的(随机)字符)

多因素认证

  • 动态验证码
  • 数字证书
  • 问题答案(密保问题)
  • 安全盾
  • 人脸识别
  • ......

Session与认证

密码与证书等认证手段,一般仅用于登录的过程,当用户登录完成后,用户访问网站的页面,不能每次都要输入账号密码,因此,需要替换一个对用户透明的凭证,这个凭证,就是SessionID。

当用户登录完成,在服务器端就会创建一个新的会话(Session),会话中会保存用户的状态和相关信息,服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户即可,为了告诉服务器是哪个用户,浏览器需要将当前用户持有的SessionID告知服务器。

最常见的做噶就是把SessionID加密后保存在Cookie中,因为Cookie会随着HTTP请求头发送,且收到浏览器同源策略的保护。

但如果SessionID一旦在生命周期内被窃取,就等同于账户失窃(XSS、Sniff、木马窃取)。

在手机操作系统中,如果手机浏览器不支持Cookie,只能将SessionID作为URL的一个参数用于认证。

Session Fixation攻击(重放攻击)

A卖车给B,A藏了一把钥匙没有给B,B如果没有换锁,A还是能开走车。

这个没有换锁而导致的安全问题,就是Session Fixation问题。

Session保持攻击

  • Session失效时间长
  • 用户登陆后刷新页面,Session的过期时间就重新计时
  • Session保存在Cookie中,通过修改Cookie中的过期(expire)时间来保持状态。

单点登录(SSO)

Single Sing On,用户只需要登录一次,就能访问所有的系统。

优点:方便

缺点:一旦被攻破,所有使用单点登录的系统都将沦陷。

解决:敏感系统再单独使用额外的验证机制。

原文地址:https://www.cnblogs.com/liuhuan086/p/14805670.html