【问题标题】:How to avoid seeing sensitive user data in django admin page?如何避免在 django 管理页面中看到敏感的用户数据?
【发布时间】:2021-07-18 08:02:39
【问题描述】:

我做了一个 django web 应用程序,用户可以在其中输入一些数据。我创建了一个超级用户,作为应用程序的管理员,我可以看到用户输入的数据,这对名称和敏感数据来说都很好,但我不想看到他们的敏感数据,比如健康数据。

我使用了来自django_cryptography.fieldsencrypt 模块,如下所示:

health_data = encrypt(models.IntegerField(default=140))

我发现如果我从外部脚本或简单的 DBbrowser 中查看数据库,它工作得很好,因为我看不到敏感数据。但我知道这在 django 管理中是无缝的:在 django 管理页面中,它在渲染之前进行解密。

所以我对加密数据感到满意,这是额外的安全性,但这不是我的第一个目标。我想拥有超级用户,但我希望我能够看到他们的敏感数据。你有什么想法 ?感谢您花时间阅读。

【问题讨论】:

  • 参见docs.djangoproject.com/en/3.2/ref/contrib/admin/…,您可以修改模型管理站点的行为。特别是如果您不想自定义显示哪些字段等,请参阅fields 属性。
  • @AbdulAzizBarkat,好的,谢谢。在我的应用程序中的admin.py 中,我用装饰器class MyModelAdmin(admin.ModelAdmin): fields=(my_fields)admin.site.register(MyModel) 更改为@admin.register 它运行良好,但事实是我不确定这是我想要的行为。如果我是恶意的,我仍然可以更改我的应用程序的代码并取回敏感数据。我知道我不会那样做,但假设我将整个代码项目的管理工作留给了另一个人。我可能是偏执狂,但我想确保我做得对。
  • 如果我是恶意的,我仍然可以更改我的应用程序的代码并取回敏感数据”,你说的好像有任何可能的解决方案来解决这种情况。谁能阻止可以直接访问代码并可以根据自己的意愿修改代码的人?他们甚至不需要管理站点,因为这只是一些使用SECRET_KEYCRYPTOGRAPHY_KEY 设置的加密,这对他们来说是清晰可见的,更不用说他们可以简单地自己查询shell...

标签: python django django-admin privacy-policy


【解决方案1】:

按照here 的建议,我从这里更改了我的管理员代码:

from django.contrib import admin
from .models import MyModel

# Register your models here.
admin.site.register(MyModel)

到这里:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    # avoid admin can see the sensitive data in admin page
    fields = ("non_sensitive_field1", "non_sensitive_field2",...,)

通过这种方式,我自定义了管理页面中呈现的字段。我在管理页面中再也看不到来自用户的敏感数据,这是我想要的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多