Ist diese Djoser-Implementierung sicher?Jquery

JQuery-Programmierung
Guest
 Ist diese Djoser-Implementierung sicher?

Post by Guest »

Diese Frage ist möglicherweise zu weit gefasst für StackOverflow, aber ich bin mir nicht sicher, wo ich sonst Hilfe finden kann.
Ich habe ein einfaches Authentifizierungssystem in Django mit Djoser und seiner JWT-Implementierung geschrieben , mit jQuery im Frontend.
Ich weiß allerdings wirklich nicht, was ich mache, und ich bin mir zu etwa 99 % sicher, dass ich es falsch gemacht habe und es völlig unsicher ist.
Zuerst, wenn ein Benutzer Absendet das Anmeldeformular, sende ich eine POST-Anfrage, um ein Aktualisierungstoken und ein Zugriffstoken abzurufen. Das Aktualisierungstoken wird als Cookie gespeichert und das Zugriffstoken wird in sessionStorage:
gespeichert

Code: Select all

// Post the form
$.post("/auth/jwt/create/", $(this).serialize())
// Success: store tokens & redirect
.done(function(data) {
// Logged in: set redirect path & store tokens
if (data.refresh !== "undefined" && data.access !== "undefined") {
Cookies.set("refresh_token", data.refresh, { expires: 30, secure: true, sameSite: "strict" });
sessionStorage.setItem("access_token", data.access);
}
})
Ich habe ein weiteres einfaches Skript, das jedes Mal ausgeführt wird, wenn eine Seite geladen wird. Dort überprüfe ich das Zugriffstoken, versuche eine Aktualisierung, wenn es ungültig ist, rufe Benutzerdaten mithilfe des Zugriffstokens ab und poste diese Benutzerdaten dann zum Anmelden im Backend. Dieses Skript meldet den Benutzer auch ab, wenn er sich auf der Abmeldeseite befindet:

Code: Select all

// Log in or out
function auth(data) {
$.post("/auth/", {
"user": data,
"csrfmiddlewaretoken": $("meta[name='csrf-token']").attr("content"),
});
}

// Remove tokens & log out
function logout() {
Cookies.remove("refresh_token");
sessionStorage.removeItem("access_token");
auth("");
}

// Authorize: get user data & log in
function authorize() {
$.ajax({
url: "/auth/users/me/",
headers: { "Authorization": "JWT "+sessionStorage.getItem("access_token") },
})
// Success: log in
.done(function(data) { auth(JSON.stringify(data)); })
// Fail: log out
.fail(function() { logout(); });
}

// Verify access token & authorize
function verify() {
$.post("/auth/jwt/verify/", { "token": sessionStorage.getItem("access_token") })
// Success: authorize
.done(function() { authorize(); })
// Fail: refresh access token
.fail(function() {
$.post("/auth/jwt/refresh/", { "refresh": Cookies.get("refresh_token") })
// Success: store new access token & authorize
.done(function(data) {
sessionStorage.setItem("access_token", data.access);
authorize();
})
// Fail: log out
.fail(function() { logout(); });
});
}

// Log out page
if (window.location.pathname == "/logout/") {
logout();
}

// Attempt login
else verify();
Schließlich melde ich den Benutzer im Backend mit Djangos nativem Login an oder ab und abmelden:

Code: Select all

def auth(request):
if not request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' or not request.method == "POST":
return HttpResponseNotAllowed(["POST"])

user_post = request.POST.get("user")
user = None

if user_post != "":
user_post = json.loads(user_post)
if "id" in user_post and "username" in user_post and "email" in user_post:
user = User.objects.filter(id=user_post["id"], username=user_post["username"], email=user_post["email"]).first()

if user == None and request.user != None and request.user.is_authenticated:
logout(request)
return HttpResponse("User logged out.")
elif user != None and user != request.user:
login(request, user)
return HttpResponse("User logged in.")
else:
return HttpResponse("No change.")
Was mir am meisten Sorgen bereitet, ist der Teil, bei dem eine einfache POST-Anfrage einen Benutzer nur mit seiner ID, seinem Benutzernamen und seiner E-Mail-Adresse anmelden kann. Obwohl ich die ID vor der Öffentlichkeit geheim halten werde, könnte ein Hacker, wenn er sie irgendwie erhält (oder nur errät), die Notwendigkeit eines Passworts oder von Tokens leicht umgehen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post