【白帽子】认证与会话管理

1、认证与授权的区别

  • 认证(Authentication)
  • 授权(Authorization)
    认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做什么
    认证实际上就是一个验证凭证的过程

1、只有一个凭证被用于认证,则称为“单因素认证”
2、如果有两个或多个凭证被用于认证,则称为“双因素”


2、目前常用的一种暴力破解手段

选择一些弱口令,比如123456,然后猜解用户名,直到发现一个使用弱口令的账户为止。由于用户名往往是公开的信息,攻击者可以收集一份用户名的字典,使得这种攻击的成本非常低,而效果却比暴力破解密码要好很多

3、密码的保存

密码必须以不可逆的加密算法,或者是单向散列函数算法,加密后存储在数据库中
将明文密码经过哈希(比如MD5或者SHA-1)在保存到数据库,是目前业界比较普遍的做法

4、一种破解MD5后密码的方法

彩虹表
收集尽可能多的密码明文和明文对应的MD5值
为了避免密码哈希值泄露后,黑客能够直接通过彩虹表查询出密码明文,在计算密码明文的哈希值时,增加一个"Salt"
"Salt"时一个字符串,它的作用时为了增加明文的复杂度,并能够使得彩虹表一类的攻击失效
MD5(Username+Password+Salt)
其中Salt=abcddcba……(随机字符串)

5、Session与认证

当认证成功后,就需要替换一个对用户透明的凭证——SessionID
当用户已经成功登陆网页后,在服务器端会生成一个新的会话(其中保存用户的状态和相关信息),此时只需要知道是哪个用户在浏览当前网页即可——把当前用户持有的SessionID告知服务器


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


SessionID还可以保存在URL中,作为请求的一个参数(不安全)

6、Session Fixation攻击(会话固定攻击)

在用户登录网站的过程中,如果登录前后用户的SessionID没有发生变化,则会存在Session Fixation问题


攻击者先获取一个未经认证的SessionID,然后将这个SessionID交给用户Y去认证,Y完全认证后,服务器并未更新此SessionID的值(注意是未改变SessionID,而不是未改变Session),所以X可以直接凭借此SessionID登录进Y的账户


7、单点登录(SSO,Single Sign On)

它希望用户只需要登录一次,就可以访问所有的系统
SSO的优点在于风险集中化,只需要保护好这一个点。缺点同样很明显,因为风险集中了,所以单点一旦被攻破的话,后果非常严重。

你可能感兴趣的:(【白帽子】认证与会话管理)