在 java spring web 应用程序中保存安全信息的最佳位置

tim*_*tom 5 java security spring

我有使用 java spring 实现的 Web 应用程序。基本上应用程序中的每个用户都可以存储一些关键信息。一旦用户输入该数据,它应该被持久化。是否有任何标准方法来存储该安全信息。我可以想到以下位置来存储该信息

1) In database
2) On Webserver as different files for each user. We can encrypt data in those files using some key.
Run Code Online (Sandbox Code Playgroud)

我更喜欢将网络服务器作为每个用户的文件。但我有以下问题:

1) Where can we store those files on webserver
2) How can we restrict access to those files?
3) Is there something available in spring to achieve this?
4) What kind of encryption library I can use to achieve this. And where I can store key for each user.
5) How we can sync those files on multiple instances. Is there some standard library for this also?
Run Code Online (Sandbox Code Playgroud)

boe*_*m_s 3

我不熟悉 Spring,但我最近从事安全文件存储方面的工作,所以我可以说:

我们可以在哪里存储文件?

  • 在服务器上
    您可以将文件存储在服务器上并读取它们,但是如果您的服务器已损坏,那么攻击者就会获取这些文件
  • 在数据库中,
    众所周知的 DBMS(例如 MySQL 或 MongoDB)允许您存储文件(作为 blob 或块集)。

将文件存储在数据库中的优点如下:如果攻击者到达您的服务器,那么他将无法获取文件,他将必须找到数据库密码。


我们如何限制对这些文件的访问?

  • 限制对最终攻击者的访问
    在服务器上创建一个新用户,该用户是唯一可以访问您的数据库或文件并使用强密码的用户。
  • 限制其他用户的访问
    只需要求身份验证!但简单的密码不太安全......

验证

对于足够强大的身份验证方法,您必须向您的用户询问以下 3 个问题中的 2 个问题:

  1. 你知道什么 ?(例如密码)
  2. 你有什么 ?(例如短信电话验证)
  3. 你是做什么的 ?(例如指纹、眼部扫描...)


不够安全?让我们快速讨论一下文件加密......


我可以使用什么样的加密库来实现这一点。我可以在哪里存储每个用户的密钥?

对于库,我不知道(抱歉),但对于加密方法,请保持简单:使用众所周知且高效的算法,如 RSA、AES 或 Triple DES。

如何处理加密?

以下是我与朋友就文件加密和密钥存储进行对话的结果:

  • 存储: 客户端必须加密文件。然后,他将密钥文件名(或文件 ID)发送到服务器 ( server1),并将加密文件发送到另一服务器 ( server2)

  • 下载: 客户端从 中获取加密文件server2,读取文件名(或文件 ID)并从中获取正确的密钥server1,以便他可以解密该文件。

最好的办法是通过双因素身份验证(3 个问题中的 2 个问题)来保护 2 个服务器(12),但这可能会破坏用户的体验。

希望它能有所帮助,