Django 登录/有效负载在 Chrome DevTools 中以明文形式可见

Hem*_*tel 4 python authentication django payload

这很奇怪。我已经创建了很多次登录功能,但从未注意到这个事情。当我们在表单中提供用户名和密码并提交它时,它会像这样转到服务器端Payload,我可以在 Chrome DevTools 网络选项卡中看到数据:

csrfmiddlewaretoken: 
mHjXdIDo50tfygxZualuxaCBBdKboeK2R89scsxyfUxm22iFsMHY2xKtxC9uQNni
username: testuser
password: 'dummy pass' #same as i typed(no encryption)
Run Code Online (Sandbox Code Playgroud)

我在信用不正确的情况下得到了这个,因为登录失败并且它不会重定向到其他页面。但后来我尝试使用有效的凭据,并选中了Preserve logChrome 网络选项卡中的复选框。然后我检查了那里,我仍然可以看到确切输入的Usernamepassword。起初我以为我可能错过了一些加密逻辑之类的东西。但后来我尝试了多家知名科技公司的登录功能,我仍然可以在有效负载中看到信用信息。这不是错了吗?

应该是加密格式吧?

模型.py

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

登录视图

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")
Run Code Online (Sandbox Code Playgroud)

kim*_*mbo 7

应该是加密格式吧?

不。

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

如果您在发出请求时运行tcpdumpWireshark ,您会看到它在网络上已加密

为了使数据可供任何人使用,必须在某个时刻对其进行解密/解密。

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


这是对类似问题的类似答案。


编辑:这一切都假设您正在使用https. 如果您使用纯 ole http任何嗅探网络的人都可以以明文形式看到您的用户名+密码。