首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否遗漏了当前会话管理的任何漏洞?

我是否遗漏了当前会话管理的任何漏洞?
EN

Security用户
提问于 2017-03-28 19:17:06
回答 1查看 1.8K关注 0票数 2

我正在用Spring构建一个站点,它需要身份验证才能访问某些页面。

该站点实际上由一个呈现视图和处理数据绑定的客户端主机和一个REST主机(也是用Spring构建的)组成,它的责任是返回/操作数据、验证/生成用户令牌等。

我决定在REST端实现自定义身份验证,在接收到有效的用户名和密码后,它将返回:

  • 由REST用AES-256签名的JWT,有效载荷将包含用户id和到期日期。
  • JWT存储在cookie上,它仅是HTTP,安全,并且只从客户端站点域有效(它足以对抗csrf攻击吗?)

我能想到的唯一后门是,如果攻击者窃取了cookie,我就可以为该cookie向JWT有效负载添加一个唯一的随机值(存储在数据库中),如果用户怀疑他的会话被窃取,他可以发出重置唯一值的请求,使被盗的令牌毫无用处。

我是否遗漏了任何允许攻击者轻松绕过身份验证的后门?我是否应该使用Security来代替?恐怕我无法实现我目前的无国籍行为.

谢谢!

EN

回答 1

Security用户

回答已采纳

发布于 2017-03-28 21:04:41

你将很容易受到CSRF的攻击。

由于您希望成为无状态的,最好的选择是使用双提交曲奇变体。您需要小心,不要天真地去做,请看问题。简而言之,您需要将CSRF令牌绑定到安全会话:

  1. 生成足够大的CSRF令牌
  2. 将CSRF令牌包含在JWT中作为索赔之一
  3. 例如,在JSON对象中成功身份验证的结果中,向客户端提供CSRF。您将在同一步中提供包含JWT的cookie。不能从客户机(httpOnly)读取Cookie,因此必须以JSON对象或其他格式提供Cookie。
  4. 在客户端,将CSRF令牌存储在sessionStorage或localStorage中,并在每个更改状态的请求中将其作为标头发送到服务器。
  5. 在服务器端验证来自报头和JWT的值。

您的撤销JWT的解决方案很好。确保在用户更改密码时生成新id并发出新令牌。

为了最小化被盗的JWT可能对应用程序造成的影响,请尽可能缩短过期时间。

您可以使用security来实现无状态的JWT安全性,并且应该避免在REST控制器中这样做,并滚动您自己的自定义实现。将视为一个良好的起点。尽管它是针对Spring的,但它可以很容易地被修改,因此它可以与普通Spring一起工作。

票数 3
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/155160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档