django 是否在 clear-text 中传递密码表单数据?

Does django pass password form data in clear-text?

我用 Django 制作网站已有 2 年了。一位客户给了我一份 ethical-hack 报告,其中提到我网站上的所有密码都是 clear-text.

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

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

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

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

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

在此之上添加额外的加密不会增加太多 "value"。想象一下,您对密码进行了加密,那么这意味着如果黑客可以通过某种方式拦截和解密数据包,he/she 也可以将加密后的密码发送到服务器。

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