如何(以编程方式或通过其他方式)加密或保护客户数据

时间:2014-06-13 06:45:07

标签: django postgresql security encryption privacy

我正在开展一个网络项目,我希望(尽可能)处理用户数据,以便在有人危及我们的服务器/数据库的情况下减少对用户隐私的损害。

当然,我们只有网站所需的用户数据,但由于项目的性质,我们有很多关于用户的信息(部分功能是将自己应用于工作和发送你的简历)

我们考虑过使用私钥/公钥对来加密/解密敏感数据,其中私钥是用用户密码加密的,但是发现了一些安全性和实现问题:P

问题是如何使用浏览器兼容协议实现用户隐私和防止集中式Web服务器上的数据被盗,而为了功能,用户可以交换合理的数据?

提供一些额外的见解:这个项目尚未进入生产阶段,因此仍有时间做好事。

我们已经在做一些基本的事情,比如

  • 提供https
  • 为可能处理敏感数据的网站强制执行https
  • 哈希盐渍密码
  • 我们的服务器和服务的一些强化
  • 加密硬盘以防止有人在窃取我们的服务器/硬盘后阅读所有客户信息

但就是这样,除了密码哈希之外没有任何机制可以阻止/至少使那些设法进入(部分)服务器的人更难获得所有用户的所有数据。我们也没有看到加密用户数据以禁止我们自己阅读它们的方法,因为我们需要网站的某些部分/我们希望它提供的功能的数据(我们不会收集它)。即使我们以某种方式管理(可能有一些javascript)所有数据都会加密(通过客户端的浏览器)我们为客户端服务他的私钥加密了一些密码(例如他的登录密码)我们不能为检查扫描用户上传的文件是否有病毒等。另一方面,至少使用浏览器/网络服务器概念的客户端加密至少会像我们想象的那样留下一些安全问题(欢迎你证明我错了)并且看起来很像重新发明轮子,也许就像这个项目一样主要不是关于隐私,而是隐私是一种可以使用的属性,我们可能不想为它重新发明轮子。我坚信我不是第一个考虑这个的网络开发者,是吗?那么还有其他项目做了什么?您尝试保护用户数据做了什么?

如果相关,我们使用django和postrgreSQL来处理大多数事情和javascript用于某些UI

1 个答案:

答案 0 :(得分:0)

解决此问题的常用方法是拆分(分区)数据。

在面向Internet的Web服务器上保留最少的数据,并尽快将任何敏感数据传递到另一台保存在第二个防火墙内的服务器。通常,内部安全服务器从Web服务器数据,以进一步提高安全性。这就是银行和金融机构处理来自互联网的敏感数据的方式(至少他们应该)。甚至还有一套标准(PCI)涵盖了信用卡交易的安全处理,可以解释所有这些麻烦的细节。

为了进一步保护内部服务器,您可以将其置于单独的网络上并对其进行物理访问。您还可以关注其他安全工具,例如数据丢失保护和入侵防护。

此外,如果您有任何 不需要查看的数据,请使用客户端加密库在本地加密。当然还存在风险,因为用户工作站可能会受到恶意软件的攻击,但它仍然会消除数据传输过程中的风险以及服务器存储风险。它还将责任放在用户身上,而不仅仅是放在中央服务器上。

在确保您的客户安全可靠方面,您似乎已经远远领先于大多数Web开发人员。值得考虑的另一个小改变是为您网站的所有交易启用强制HTTPS。这样,意外数据泄漏的可能性很小,例如数据被意外缓存。

更新:

客户端加密可以提供很多帮助,因为它将加密责任放在用户身上。以LastPass为例。如果不进行加密客户端,您永远不会信任该服务。与在本地设置密钥的备份服务类似,以便服务器上的某些人永远无法解锁备份 - 他们永远不会拥有密钥。

分区是企业保护具有面向Internet的组件的服务的主要方法之一。正如我所说,通常情况下,安全服务器从不太安全的服务器中提取数据,因此安全性较低的服务器即使完全受损也无法访问任何更安全的数据。实际上,将有一个防火墙阻止来自DMZ(安全性较低的服务所在的位置)进入安全网络的任何流量。只允许来自安全端的连接,并且它们将受到安全进程的严格控制。在典型的银行或其他高安全性设置中,您可能会发现这样的几个层,每个层都有独立的安全控制,所有这些层都相互划分,强制实现数据和安全性的分离。

希望增加一些清晰度。如果没有继续询问!

更新2:

即使是简单,低成本的设置,我仍然建议分区。对于低成本版本,请考虑使用两个虚拟服务器,在更安全的服务器上仔细控制软件防火墙,替换专用防火墙。对于其他所有内容,请遵循上述相同的原则。