【Web安全】认证与会话管理

目录

1. 认证与授权

2. 密码

3. 多因素认证

 4. Session与认证

5. Session Fixation攻击

6. Session 保持攻击

7. 单点登录SSO


1. 认证与授权

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

认证实际上是一个验证凭证的过程。

如果只有一个凭证被用于认证,则称为“单因素认证”

如果有两个或多个凭证被用于认证,则称为“多因素认证”

2. 密码

密码的优点是成本低,使用起来方便,但缺点是其安全性较弱,可能会被猜解

目前黑客常用的暴力破解的手段,不是破解密码,而是利用弱口令猜解用户名,直到发现一个使用弱口令的账户为止。 

 密码的保存必须使用不可逆的加密算法,或者是单向散列函数算法,加密后存储在数据库中。

在用户注册时就将密码进行哈希(MD5或SHA-1)后保存至数据库,用户登陆时将用户提交的密码进行相同算法的哈希,再将该哈希值与数据库中的密码哈希值进行比较。 

目前黑客破解MD5的一种方法是“彩虹表”,表内收集尽可能多的密码明文与明文对应的MD5值,这样只需要查询到MD5值就可以知道对应的明文。

为此引入了加盐哈希,盐值Salt增强了密码的复杂度。

3. 多因素认证

如果只有密码,安全性太低,所以大多数平台都会使用双因素认证或多因素认证。

例如手机动态口令、数字证书、支付盾、第三方证书……使得认证的过程更加安全。

 4. Session与认证

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

为了告诉服务器应该使用哪一个Session,浏览器需要把当前用户持有的SessionID告知服务器。

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

Session劫持就是通过窃取用户的SessionID,使用该SessionID登录目标账户进行攻击的方法,如果SessionID保存在Cookie中,则称为Cookie劫持。

SessionID还可以保存在URL中作为请求的一个参数,但是安全性很低。(很多手机浏览器不支持Cookie,就只能将SessionID作为URL参数)

5. Session Fixation攻击

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

用户X获取到一个未经认证的SessionID,将其交给用户Y去认证,Y完成认证后,服务器没有更新此SessionID的值(注意是未改变SessionID而不是未改变Session),所以X可以直接凭借SessionID登录Y的账户。

如果SessionID保存在URL中,只要攻击者诱使用户打开这个URL,在该用户登陆完成后,黑客就可以直接通过此URL进入用户账户。

想要防止Session Fixation攻击,在登陆完成后,重写SessionID。 

6. Session 保持攻击

保持该Session一直不失效,就可能一直成为攻击者的后门。

攻击者可以通过不停地发起访问请求(不停刷新页面、发送带有自定义Cookie头的HTTP包),让Session一直活下去。

在Web开发中,网站访问量如果比较大,维护Session可能会给网站带来巨大负担。因此,有一种做法,就是服务器端不维护Session,把Session放在Cookie中加密保存。当浏览器访问网站时,会自动带上Cookie,服务器端只需要解密Cookie即可得到当前用户的Session。

Cookie的Expire标签可以控制Session的失效时间,且这个时间完全由客户端控制。篡改这个世界使其永久有效,就可以得到一个永久有效的Session,服务器端无法察觉。

攻击者甚至可以为Session Cookie增加一个Expire时间,使得原本会浏览器关闭就失效的Cookie持久化地保存在本地,变成一个第三方Cookie。

7. 单点登录SSO

单点登录希望用户只需要登陆一次,就可以访问所有的系统。

SSO的优点在于风险集中化,只需要保护好这一个点。

SSO的缺点在于风险集中,这个点一旦被攻破全盘崩溃。

目前网上最为流行和开放的单点登录系统是OpenID。它使用URL作为用户的身份标识,每个用户拥有唯一的URL。

 在使用OpenID时,第一步是向网站提供OpenID。

 第二部,网站重定向到OpenID的提供者进行身份认证。

第三步,用户将在OpenID的提供者网站登录,并重定向回网站。 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RexHarrr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值