【问题标题】:Encrypted Django Model Fields加密的 Django 模型字段
【发布时间】:2009-08-30 04:55:01
【问题描述】:

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

【问题讨论】:

    标签: python django encryption django-models


    【解决方案1】:

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

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

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

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

    这可以保护信息免受对 Web 应用程序的授权访问(对弱用户名/密码非常安全),也可以防止数据库级别的泄漏。

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

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

    【讨论】:

    • 不应该用公钥加密,用私钥解密吗?
    • 然后我猜公钥/私钥对将仅用于加密/解密加密数据的对称密钥。此外,您似乎可以完全控制系统软件,并且可以在加密之前轻松访问纯数据。还是我理解错了?
    • 不,使用私钥加密。
    • 关于第二点,我请您参考倒数第二段。
    • 一般来说,公钥是用来加密只有私钥持有者才能解密的消息。这个想法是 public 密钥不是秘密的,因为它仅用于加密内容而不能用于解密任何内容。
    【解决方案2】:

    不,不可能同时拥有无法解密的形式和可以解密以同时显示给客户的形式的数据。您可以做的最好的事情是对内容进行可逆加密,因此至少如果您的服务器受到损害,他们的数据是安全的。

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          您和您的客户可以同意他们被遮蔽。一个简单的 XOR 操作或类似的操作会使这些值在管理员中无法读取,并且可以在站点需要它们的时候及时解码。

          这样您就可以安全地管理网站,而不会“意外”阅读内容。

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 2014-04-25
              • 2016-09-11
              • 2011-04-12
              • 2011-02-28
              • 2012-05-13
              • 1970-01-01
              • 1970-01-01
              • 2019-12-24
              • 1970-01-01
              相关资源
              最近更新 更多