javascript - 客户端服务器加密
问题描述
我有 Xamarin 作为我的移动客户端,node.js 作为我的后端,MongoDB 作为数据库。我正在尝试加密用户的数据并将其保存在数据库中。如果我做服务器加密,黑客仍然可以在通过 API 传输时看到数据。我应该进行客户端加密,将数据传递给 API 并将其存储在数据库中,还是应该进行双层加密(即)从客户端加密用户数据,通过 API 传递,再次进行服务器端加密并将其存储在数据库中. 基本上,我想知道客户端服务器加密在现实世界中是如何工作的。
令人担忧的是,即使数据库被黑客入侵,用户的数据也是敏感的并且需要保护。
解决方案
有几点我们可以应用加密,这有点令人困惑,但让我逐步向您解释。
数据库加密
即使服务器被黑客入侵,您对敏感数据安全的担忧也是有道理的。因此,无论您拥有什么敏感信息,都需要加密。但是,有几种方法可以实现加密。为避免过于复杂,我将讨论此级别的两种加密类型:
- 单向加密
- 双向加密
用户的密码是只有原始形式的用户才感兴趣的数据。因此,您可以应用单向加密,即给定用户的密码,您知道如何对其进行编码,因此您存储密码的加密版本,随后每当用户登录时,通过比较来验证他/她的密码加密他/她输入的任何内容与存储在数据库中的内容的结果。但是,您应该无法解密加密的密码,因为密码无论如何都需要一个方向,如下所示:
- 用户输入值
- 发送到服务器
- 接收它
- 并加密原始密码
- 然后将接收到的密码的加密版本与存储的加密密码进行比较
在此级别加密数据的另一种方法是双向加密,即您可以实际解密的加密方法。您需要将这种方法用于出于某种原因可能需要以原始形式呈现的任何数据,例如向用户展示。
服务器对发送给用户的数据进行加密
如果您的项目所有者担心您的用户设备/应用程序的安全性(例如使用不安全扩展的浏览器的漏洞或用户使用浏览器访问陌生网站的漏洞),那么可以对发送给用户的一些数据进行加密。除非您特别需要执行此类操作,否则请避免此操作。
客户端对发送到服务器的数据进行加密
如果通信通道不安全,那么在将值发送到服务器之前,您可能需要在客户端应用一些加密。
好消息!HTTPS!
HTTP 代表超文本传输协议。它的 HTTPS 版本已经对消息进行了编码,它代表安全超文本传输协议。如果您已经使用 HTTPS 作为协议,那么您的客户端请求已经被加密,因此监听您发送的请求的第三方将在请求发送和响应接收事件中收到一些乱码数据。
概括
如果您没有被要求进一步加密,那么您应该在您的数据库上使用 HTTPS 和密码的单向编码,因为这通常是现实世界的方法。如果您需要执行进一步的安全措施,或者因为您有更多敏感的用户信息或对项目的某些方面的真正担忧,或者只是一个需求,那么您可以使用您需要的任何其他方式扩展此方法。但是 HTTPS 和在数据库级别对密码进行单向编码是绝对必须的。
推荐阅读
- javascript - 如何在下面的代码中打印正确的名称?
- ios - 后台获取在物理设备上不起作用
- kubernetes - 如何在 GKE 中使用临时 IP 创建 Kubernetes 负载均衡器?
- math - 函数的序列表示是否都实际用于计算机科学中的图形?
- c - 我正在尝试在 c 中打印一个点网格
- typescript - TypeScript 3 现在使用 btoa() 产生错误
- scala - 返回 scala 中包含谓词的数字列表
- celery - 没有后端的气流中的芹菜执行器
- model-view-controller - MVC 中的模型需要是一个类还是只是一个常见的模式?
- ssl - 将自签名证书添加到 Netsuite https 模块以访问第三方 Web 服务