我们最近让一位安全工程师审查了我们的平台,他们告诉我们,当数据被发送到服务器时,我们需要对其进行加密。
但是,我们已经用SSL证书发送数据了。据我所知,这为我们处理所有的加密。
有一个前端反应应用程序&后端api。用户在前端输入他们的凭据,前端将其发送到后端。这个发送部分是有问题的部分。
前端和后端都启用了SSL。
有什么我错过和/或我们也应该做的事情吗?
发布于 2021-07-28 05:07:59
SSL本身是不可取的,使用证书(甚至它包含的密钥)直接加密用户数据是非常奇怪的,但是,假设您的意思是使用TLS (可能不一定是通过HTTPS):是的,这对于保护网络传输中的数据是很好的。当然,您需要确保始终使用TLS --链中没有可选的链接,如果您的系统是基于web的使用HSTS,则无法跳过TLS,但是为了保护用户和服务器之间的数据安全,TLS(截至2021年版本1.2或更高版本)是黄金标准,在其中添加额外的加密几乎是100%没有价值的(除非您运行的应用是很少的几类应用程序中的一种,而服务器不需要,甚至永远也不应该查看用户数据本身)。
尽管如此,还有其他地方您可能需要加密数据。您是否在静止时(在数据库或文件存储中或其他地方)加密它?您是否在内部对其进行加密(也就是说,如果您使用多个彼此通信的服务器--甚至只是一个负载均衡器,其背后是应用服务器)--您是否也在它们之间使用TLS?数据是否被放置在TLS之外的任何地方,比如URL中(URL是用HTTPS加密的,但它们仍然比消息体泄漏的可能性大得多),或者如果数据是通过websockets或窗口消息或什么东西发送的?实际上,您是直接使用这些数据,还是只是将其传递给其他人(例如,信用卡信息给支付处理器,存储在密码管理器/某种保险库中的机密,等等)?
您还可能将加密与其他加密操作混淆。您在标题中提到用户登录;您如何存储用户凭据?大多数凭据和其他长期存在的秘密,如密码或API密钥或刷新令牌,都需要在存储在DB中之前进行散列(不过,退出TLS隧道后在服务器上散列;除非在非常罕见的情况下,没有必要先在客户机上散列,即使这样做,也必须在服务器上再次散列)。请注意,像密码一样,对低熵秘密进行哈希运算时,必须故意使用缓慢的函数才能安全。
如果你提供更多的信息--包括你的应用程序,以及你得到的具体建议--这将帮助我们更多地帮助你。
https://security.stackexchange.com/questions/252724
复制相似问题