【问题标题】:Does django pass password form data in clear-text?django 是否以明文形式传递密码表单数据?
【发布时间】:2020-09-09 21:58:33
【问题描述】:

我已经用 Django 制作网站 2 年了。一位客户给了我一份道德黑客报告,其中提到我网站上的所有密码都是明文。

我通过检查浏览器开发者控制台中“网络”部分中的请求标头确认了这一点。我可以在 POST 查询中以明文形式清楚地看到我的用户名和密码。这适用于所有密码字段。即使在 django 的管理界面登录字段中。

我正在使用 django 内置的 UserCreationForm 和 AuthenticationForm 以及来自 django.contrib.auth 的视图,因为我认为这是最安全的做法。

所以我应该担心吗?当然,Django 的开发人员肯定知道他们在做什么。但这真的安全吗?在 POST 请求中传递明文密码?我应该在生产环境中启用 django admin 吗?

【问题讨论】:

标签: django django-forms django-views django-admin django-authentication


【解决方案1】:

以纯文本形式发送密码是常见的做法。不仅在 Django 中,而且在许多身份验证框架中。只要它使用安全通道(并且该通道没有受到损害),就足够了。

现在,您通常通过 加密 层(如 HTTPS)与服务器通信。这意味着浏览器和服务器首先协商加密,因此您所做的所有请求都通过加密的“通道”提交。因此,您为验证 而发出的 POST 请求是 加密的。浏览器不会显示这一点,因为请求本身确实包含纯文本密码,但整个消息是加密的。

在此之上添加额外的加密不会增加太多“价值”。假设你对密码进行了加密,那么这意味着如果黑客可以通过某种方式截取和解密包,他/她也可以将加密后的密码发送到服务器。

HTTPS 通常旨在通过证书防止 中间人 攻击。存在复杂的攻击以从连接中剥离 SSL 层,因此应该使用像 HSTS [wiki] 这样的技术以防止协议降级。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多