加密的Django模型字段

时间:2009-08-30 04:55:01

标签: python django encryption django-models

客户希望确保我无法从他们的网站读取敏感数据,这些数据仍由我管理。实际上,这意味着我将拥有数据库访问权限,但我无法读取某些模型字段的内容。有没有办法让我无法访问数据,但仍然由服务器解密以供客户端浏览?

6 个答案:

答案 0 :(得分:5)

使用公钥加密可以实现这一点。我以前在PHP中做过类似的事情,但是Django应用程序的想法是一样的:

本网站上的所有数据均使用系统软件持有的私钥加密存储。用于解密数据的相应公钥由客户端保存在文本文件中。

当客户想要访问他们的数据时,他们将公钥粘贴到授权表格中(在会话中持有密钥),解锁数据。

完成后,他们取消了对会话的授权。

这可以防止信息被授权访问Web应用程序(因此可以安全地防止弱用户名/密码)以及数据库级别的泄漏。

这仍然不是完全安全的:如果您具有对计算机的root访问权限,则可以在上载时捕获该密钥,或检查会话信息。为此,可以在客户机器上运行读取软件,并通过API访问数据库。

我意识到这是一个古老的问题,但我想我会澄清这确实是可能的。

答案 1 :(得分:4)

不,不可能将数据都放在您无法解密的表单中,并且可以解密它以同时向客户端显示数据。您可以做的最好是对内容进行可逆加密,因此至少如果您的服务器遭到入侵,他们的数据是安全的。

答案 2 :(得分:2)

答案 3 :(得分:1)

您可能会发现Django Encrypted Fields有用。

答案 4 :(得分:0)

您和您的客户可以同意他们被遮挡。简单的XOR操作或类似的操作会使管理员中的值无法读取,并且可以在网站中及时解码它们。

通过这种方式,您可以安全地管理网站,而无需“意外”阅读。

确保您的客户明白您在技术上可以获得实际内容,但需要积极努力。

答案 5 :(得分:0)

要考虑的其他一些问题是,Web应用程序将无法对加密字段进行排序或轻松查询。了解客户希望您拥有哪些管理功能会很有帮助。另一种方法是拥有一个单独的应用程序/访问渠道,该渠道不会显示关键数据,但仍允许您仅执行管理功能。