认证与会话管理

JAVA乐园

共 1756字,需浏览 4分钟

 · 2021-08-25

认证与会话管理

认证和授权是两个事情,认证是为了认出用户是谁,授权是为了决定用户可以做什么。


密码认证

密码是最简单编辑的认证方式,但也是最容易被突破的方式。适当增加密码的长度/密码字符的复杂度以及排除简单字符组合,可以有效加强密码强度。


密码保存一般采用不可逆的加密算法,或者是单向散列函数算法加密后放到数据库中。但是这样还是有可能被黑客使用"彩虹表"的方法破译。


彩虹表的策略是收集尽可能多的密码原文和加密值的对应,根据这样的键值对去匹配就好了,应对这样的破译最好的方法就是加一个salt。


slat 就是在加密密码的时候加上一个随机的字符串,只要这个随机的 salt 不被窃取,破译就是非常困难的。即便被窃取,彩虹表也需要根据 salt 来调整。


多因素认证

除了支付密码外,手机动态口令/数字证书/第三方证书甚至刷脸/指纹等都可以作为用户认证的手段


Session认证

密码和证书等认证只能用在登录的时候,登录后就需要使用SessionID来认证,常见的做法是把sessionId放到cookie中。因为cookie会随着http请求发送,并且受到同源策略的保护


sessionID是用户登录后的唯一凭证,一旦被黑客使用XSS等方式窃取后,就可以伪装成用户来完成一系列操作


Session Fixation

简单来说就是 X 先获取一个未认证的 seesionID,然后把这个 id 给 Y,Y 去完成认证后,X 就是使用这个 sessionID 来伪装成 Y 操作了


最关键的核心是服务器在 Y 完成认证后,并没有去更新 Y 的 sessionID,所以只要我们在用户登录后,重写 SessionId,就可以有效的避免这个问题.


单点登录(SSO)

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


它的优点在于风险集中,只需要保护好一个点就行,缺点在于风险太高,一旦被攻破,后果很严重


比较流行的是 OpenId


访问控制

权限控制,抽象的说,就是某个主体需要实施某种操作,而系统对这种操作的限制就是权限控制

垂直权限管理

访问控制实际上建立用户和权限之间的对应关系,下面我们介绍一种基于角色的访问控制 ( Role-Base Access Control ) RBAC


简单来说就是一个系统会定义不同的角色,不同的角色有不同的权限,系统中的用户会被分配多个不同的角色从而获得不同的权限.系统在验证权限的时候,只需要验证角色就可以了。


常见的如 Spring Security 提供基于 url 和基于 method 的控制


不同的角色权限有高低之分,高权限访问低权限是可以的,低的访问搞的是被禁止的。如果低的获取了高的权限,则发生了"越权访问"


配置权限,应当遵循最小权限原则,并且使用 默认拒绝 的策略


水平权限管理

相对于垂直权限管理来说,水平权限问题出在同一个角色上,系统只验证了能访问数据的角色,而没有对角色的用户做细分,也没有对数据子集做细分,因此缺乏一个用户到数据的映射关系。由于水平权限管理是系统一个数据级的访问控制造成的,所以水平权限管理又称为 基于数据的访问控制。


OAuth

OAuth 解决授权问题,OpenId 解决认证问题


OAuth 允许用户在不将第三方网站的用户密码暴露的情况,授权其他网站使用第三方的数据


密码

密码系统的安全性应该依赖于秘钥的复杂性,而不是算法的保密性。


密码管理最常见的错误,就是把秘钥硬编码在代码里,同样的,将加密秘钥/签名的salt等 "key" 硬编码在代码中,是很不好的习惯。


硬编码的秘钥可能通过以下方式泄露:

  • 代码被广泛传播,常见于框架,或者被反编译的代码

  • 团队成员都可以获取,流动性较大的话


常见的管理办法是将秘钥保存在配置文件或者数据库中,能接触到配置文件和数据库的人要越少越好,权限控制要格外注意。


发布到生产环境的时候,需要生产新的密码或密码


source:https://www.yuque.com/heyuqing/hgukev/ihmsxo

喜欢,在看

浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报