客户端服务器加密

Client Server Encryption

我将 Xamarin 作为我的移动客户端,node.js 作为我的后端,MongoDB 作为数据库。我正在尝试加密用户的数据并将其保存在数据库中。如果我做服务器加密,黑客仍然可以看到通过 APIs 传输的数据。我应该进行客户端加密,将数据传递给 API 并将其存储在数据库中,还是应该进行双层加密(即)从客户端加密用户数据,将其传递给 API,再次执行 server-side encryption 并将其存储在数据库中。基本上,我想知道客户端服务器加密在现实世界中是如何工作的。

担心用户的数据是敏感的,即使数据库被黑也需要保护。

我们可以在几个点上应用加密,这有点令人困惑,但让我逐个部分向您解释一下。

数据库加密

即使服务器被黑,您对敏感数据安全的担忧也是有道理的。因此,无论您拥有什么敏感信息,都需要加密。但是,有几种方法可以实现加密。为了避免过于复杂,我将讨论这一级别的两种加密类型:

  • 单向加密
  • 双向加密

用户的密码是一个数据,只有原始形式的用户才感兴趣。因此,您可以应用单向加密,也就是说,根据您知道如何对其进行编码的用户密码,您可以存储密码的加密版本,随后每当用户登录时,验证 his/her 密码通过比较加密输入的 he/she 与数据库中存储的内容的结果。但是,你应该无法解密加密的密码,因为无论如何密码都需要一个方向,看起来像:

  • 用户键入值
  • 发送到服务器
  • 哪个收到它
  • 并加密原始密码
  • 然后将收到的密码的加密版本与存储的加密密码进行比较

在此级别加密数据的另一种方法是双向加密,即您可以实际解密的加密方法。您需要将此方法用于出于某种原因可能需要的任何原始形式的数据,例如将其显示给用户。

服务器对发送给用户的数据进行加密

如果您的项目所有者担心您的用户 device/application 的安全(例如使用不安全扩展程序的浏览器的漏洞或用户使用浏览器访问陌生站点),那么发送给用户的一些数据可以加密。除非您特别需要执行此类操作,否则请避免这样做。

发送到服务器的数据的客户端加密

如果通信通道不安全,那么您可能需要在将值发送到服务器之前在客户端应用一些加密。

好消息! HTTPS!

HTTP 代表超文本传输​​协议。它的 HTTPS 版本已经对消息进行了编码,它代表安全超文本传输​​协议。如果您已经在使用 HTTPS 作为协议,那么您的客户端请求已经被加密,因此侦听您发送的请求的第三方将在请求发送和响应接收事件中收到一些乱码数据。

总结

如果您没有被要求进一步加密,那么您应该在您的数据库上使用 HTTPS 和单向密码编码,因为这是现实世界中的一般方法。如果您需要执行进一步的安全措施,无论是因为您有更多敏感的用户信息,还是真正担心项目的某些方面,或者只是一个要求,那么您可以根据需要扩展此方法。但是 HTTPS 和在数据库级别对密码进行单向编码是绝对必须的。