在 ServletContext 中临时保存用户密码的想法本身有什么错误吗?

Is there anything inherently wrong with the idea of temporarily saving user passwords inside the ServletContext?

这是前提,我不允许使用JavaScript或本网站的Cookies。

但是,我不希望要求用户为每项需要密码至少 15-30 分钟的基本任务提供密码。

我也不喜欢将他们的密码保存到临时文件的想法,以防程序死机并且无法按计划删除它。

所以我的计划是在第一次接触时,为用户分配一个随机生成的唯一安全 id/hash 并将其附加到他们生成的 HTML 中。服务器端将他们的密码与 ServletContext 中的 ID 匹配。通过这种方式,对于所有传入的请求,我可以在不要求所有 类 的密码的情况下匹配它们。

此外,我将确保在 15-30 分钟到期时自动从 ServletContext 中删除他们的信息。

到目前为止,在我看来,这种方法似乎避免了 JS 和 Cookies,也避免了程序死机时面临风险的所有外部存储方法。是的,ServletContext 应该是全局的,但是如果没有它们独特的临时 id/hash 没有人能够模仿它们。

我问这个问题是因为我找不到其他人问同样的问题所以我需要确保这个方法没有任何问题。

鉴于以下限制:

  1. 不允许使用 cookie。
  2. 不允许使用 JS。
  3. 不能在客户端缓存凭据。

提议的方法乍一看似乎没问题。但是,我建议您遵循以下准则:

  1. 确保无法进行重放攻击。由于您无法在客户端对请求进行哈希处理和签名,因此请在后端经常(最好是在每个请求中)使令牌失效和刷新。
  2. CSRF 反制措施应该到位。
  3. 应该强制执行 SSL。