我使用
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.
我更喜欢将webserver作为每个用户的文件.但我有以下问题:
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?
最佳答案 我不熟悉Spring,但我最近致力于安全文件存储,所以我可以这么说:
我们在哪里可以存储文件?
>在服务器上
您可以将文件存储在服务器上并读取它们,但如果您的服务器已损坏,则攻击者会获取这些文件
>在数据库中
众所周知的DBMS(如MySQL或MongoDB)允许您存储文件(作为blob或一组块).
在DB中存储文件的优点如下:如果攻击者到达您的服务器,那么他将无法获取文件,他将不得不找到数据库密码.
我们如何限制对这些文件的访问?
>限制对最终攻击者的访问
在服务器上创建一个新用户,该用户是唯一可以访问您的数据库或文件并使用强密码的用户.
>限制对其他用户的访问
只是要求身份验证!但简单的密码不是很安全……
认证
要获得足够强大的身份验证方法,您必须向您的用户询问以下3个问题中的2个:
>你知道什么? (例如密码)
>你有什么? (例如短信电话验证)
>你是什么人? (例如指纹,眼睛扫描…)
Not secure enough ? Let’s have a quick talk about file encryption …
我可以使用什么样的加密库来实现这一目标.我可以在哪里存储每个用户的密钥?
对于图书馆,我不知道(我的道歉),但对于加密方法,保持简单:使用众所周知的高效算法,如RSA,AES或Triple DES.
如何处理加密?
以下是我与朋友就文件加密和密钥存储进行的对话的结果:
>储存:
客户端必须加密文件.然后他将密钥和文件名(或文件ID)发送到服务器(server1),并将加密文件发送到另一个服务器(server2)
>下载:
客户端从server2获取加密文件,读取文件名(或文件ID)并从server1获取正确的密钥,以便他可以解密文件.
最好的办法是使用双因素身份验证(3个问题中的2个)来保护2台服务器(1和2),但这可能会打破用户的体验.
希望它可以帮助,