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

标签 django postgresql security encryption privacy

我正在开发一个网络项目,我希望(尽可能)以一种在有人破坏我们的服务器/数据库时减少对用户隐私的损害的方式处理用户数据。

当然,我们只有网站完成其工作所需的用户数据,但由于项目的性质,我们拥有大量有关用户的信息(部分功能是让您自己参与职位并发送您的简历)

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

问题是如何在具有浏览器兼容协议(protocol)的集中式 Web 服务器上实现用户隐私和防止数据被盗,同时功能要求用户可以交换敏感数据?

提供一些额外的见解:该项目尚未进入生产阶段,因此仍有时间进行调整。

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

  • 服务 https
  • 对可能处理敏感数据的网站强制执行 https
  • 散列加盐密码
  • 对我们的服务器及其上的服务进行一些强化
  • 加密硬盘,以防止有人在窃取我们的服务器/硬盘后读取所有客户信息

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

如果相关的话,我们在大多数事情上使用 django 和 postrgreSQL,在某些 UI 上使用 javascript

最佳答案

处理此问题的常见方法是拆分(分区)数据。

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

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

此外,如果您有任何不需要清晰查看的数据,请使用客户端加密库在本地对其进行加密。当然,仍然存在风险,因为用户工作站可能会受到恶意软件的危害,但它仍然消除了数据传输过程中的风险和服务器存储风险。它还将责任交给用户,而不仅仅是中央服务器。

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

更新:

客户端加密可以提供很大帮助,因为它将加密责任交给了用户。例如,查看 LastPass。如果不进行客户端加密,您将永远无法信任该服务。与备份服务类似,您在本地设置 key ,这样服务器上的某人就永远无法解锁备份 - 他们永远不会拥有 key 。

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

希望这能增加一些清晰度。没有的话继续追问!

更新2:

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

关于django - 如何(以编程方式或其他方式)加密或保护客户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199239/

相关文章:

python - Django runserver 在等待查询服务器的外部 Web 服务时挂起

python - 将函数结果传递到 Django 中的 html

sql - 根据条件使用不同的字段

python - geodjango syncdb 错误。来自 geodjango 教程

python - 伪造文件系统/虚拟文件系统

security - Git:删除存储库中文件的所有修订,并替换为新文件

javascript - 使 django html 表单在提交时执行 2 个操作

Python:如何从类所在的范围获取常量?

sql - 如何生成4位随机数

algorithm - 客户端服务请求的隐式 "Authentication"