gpt4 book ai didi

JAVA - 检索/存储用户名和密码到服务器的安全方法?

转载 作者:行者123 更新时间:2023-11-30 07:39:26 25 4
gpt4 key购买 nike

我有一个用户名和密码组合,我将使用它通过 java 代码访问安全服务器。

我的想法是:

  1. 在外部存储加密凭据
  2. 执行时提示用户输入解密密码
  3. 在使用前将解密的凭据直接存储在字符数组中
  4. 使用凭据连接到数据库
  5. 使用后将字符数组替换为零
<小时/>

这是执行此类任务的推荐方式吗?

我了解到凭据应存储在外部,这些应如何存储?

最佳答案

我认为这个描述有几个问题:

  1. 您暗示用户提供的凭据是数据库的凭据。数据库通常存储的信息量远远超过任何单个用户应该访问的信息量。此外,即使您设法在确保数据库的各个表/行具有正确的访问级别方面做到了这一点,使最终用户凭据与数据库凭据同义将极大地妨碍任何需要的自动化服务器端处理。运行用户数据(例如,汇总统计数据、构建模型,甚至在最终用户不在屏幕上的情况下在后台代表用户执行操作)。因此,更常见的是(并且出于上述原因,更可取),数据库强制执行的访问粒度与服务器环境中运行的程序的访问相对应,而这些程序则检查最终用户凭据。

  2. 您暗示服务器将存储用户的密码。这通常是一种反模式,因为存储密码本身将使用户在发生泄露时面临更大的风险(特别是如果该密码已在其他服务上重复使用)。一般来说,系统应该只存储密码(和盐)的哈希——通常使用 bcrypt -- 用于在用户输入密码时确定匹配项,而不存储实际密码。

在降低风险方面,有几个关键事项需要考虑:

  1. 分段数据并尽可能提供间接层。也就是说,数据库应该与与之通信的应用程序隔离(考虑不同的虚拟机、不同的操作系统用户)。身份验证凭据可能应该由与其他数据完全独立的数据库和服务器应用程序来管理。需要验证用户凭据的程序永远不应该真正看到用户凭据或散列密码;他们应该获得由进行身份验证的子系统分发的短期访问 token 。等等

  2. 渗透测试,渗透测试,渗透测试。你第一次就会犯这个错误。甚至可能是第二次。通过定期让独立的外部人员进行渗透测试,确保您在坏人发现和利用这些问题之前发现(并修复)这些问题。

  3. 自动化您的测试和质量保证流程。经过测试的代码比未经测试的代码安全得多;如果您有以自动化方式运行的单元测试,您更有可能发现安全漏洞,并且您还将受到保护,免受代码安全敏感部分的回归影响。

关于JAVA - 检索/存储用户名和密码到服务器的安全方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com