这太奇怪了.我创建了很多次登录函数,但从未注意到这一点. 当我们在表单中提供用户名和密码并提交它时,它会像这样作为Payload发送到服务器端,我可以在Chrome DevTools网络选项卡中看到数据:

csrfmiddlewaretoken: 
mHjXdIDo50tfygxZualuxaCBBdKboeK2R89scsxyfUxm22iFsMHY2xKtxC9uQNni
username: testuser
password: 'dummy pass' #same as i typed(no encryption)

我在不正确的凭据的情况下得到了这个,因为登录失败,它不会重定向到另一个页面. 但后来我try 了有效的证书,并选中了Chrome网络选项卡中的Preserve log框.然后我在那里判断,我仍然可以看到准确的输入Usernamepassword.起初,我以为我可能遗漏了一些加密逻辑之类的东西. 但后来我try 了多家著名科技公司的登录功能,我仍然可以在有效载荷中看到凭据.这不是错的吗?

它应该是加密格式的,对吗?

Models.py

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

HTML

<form method="POST" class="needs-validation mb-4" novalidate>
    {% csrf_token %}
    <div class="form-outline mb-4">
       <input type="email" id="txt_email" class="form-control" 
          placeholder="Username or email address" required />
     </div>
  <div class="form-outline mb-4">
        <input type="password" id="txt_password" class="form-control" 
         placeholder="Password" required />
  </div>

                    <div class="d-grid gap-2">
                      <button class="btn btn-primary fa-lg gradient-custom-2 login_btn" type="submit" id="btn_login"><i class="fa fa-sign-in" aria-hidden="true"> </i> Sign in</button>
                      <div class="alert alert-danger" id="lbl_error" role="alert" style="display: none;">

                      </div>

                    </div>

</form>

登录视图

def authcheck(request):
    try:
        if request.method == "POST":
            username = request.POST["username"]
            password = request.POST["password"]
            user = authenticate(username=username, password=password)
            if user is not None:
                check_is_partner = Profile.objects.filter(user__username=username, is_partner=True).values("password_reset").first()
                if check_is_partner and check_is_partner['password_reset'] is True:
                    return JsonResponse(({'code':0 ,'username':username}), content_type="json")
                if check_ip_restricted(user.profile.ip_restriction, request):
                    return HttpResponse("ok_ipr", content_type="json")
                login(request, user)
                session = request.session
                session["username"] = username
                session["userid"] = user.id
                session.save()
                if check_is_partner:
                    return HttpResponse("1", content_type="json")
                else:
                    return HttpResponse("ok", content_type="json")
            else:
                return HttpResponse("nok", content_type="json")
    except Exception:
        return HttpResponse("error", content_type="json")

推荐答案

它应该是加密格式的,对吗?

您在Chrome DevTools中看到的是加密前的用户名和密码.

如果您在发出请求时运行tcpdumpWireshark,您将看到它是通过网络加密的.

为了让任何人都可以使用数据,必须在某个时候对其进行解密.

例如,您还可以在Chrome DevTool中看到响应数据(状态代码、标头、有效负载),这些数据是通过网络加密的,但在解密后会显示给您.


对于类似的问题,我给出了similar answer分.


编辑:所有这些都假定您在使用https的站点上.如果您使用的是纯OLE http任何嗅探网络的人都可以看到您的用户名+密码为纯文本.

Python相关问答推荐

Python避免mypy在相互引用中从另一个类重定义类时失败

使用Python TCP套接字发送整数并使用C#接收—接收正确数据时出错

如何从比较函数生成ngroup?

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

如何重新组织我的Pandas DataFrame,使列名成为列值?

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

Django在一个不是ForeignKey的字段上加入'

SpaCy:Regex模式在基于规则的匹配器中不起作用

为什么在Python中00是一个有效的整数?

用0填充没有覆盖范围的垃圾箱

如果服务器设置为不侦听创建,则QWebSocket客户端不连接到QWebSocketServer;如果服务器稍后开始侦听,则不连接

与同步和异步客户端兼容的Python函数

突出显示两幅图像之间的变化或差异区域

matplotlib散点图与NaNs和cmap colored颜色 矩阵

如何从另一个连接引用DuckDBPyRelation?

检测并显示网页更改

使用百分位数对数据帧单元格的背景进行着色

如何对词典列表使用Join方法,然后为值添加字符串

获取文本文件并创建CSV文件

Matplotlib背景 colored颜色 渐变生成边界