CSRF Probleme

  • Äh ja, da es Mal wieder mich stört, denke ich ich Frage Mal einfach nach:

    Ich nutze XSRF Tokens um die Requests von Nutzern abzusichern, also die übliche Vorgehensweise bei CSRF.

    Jetzt stolpere ich zum dritten Mal in der Entwicklung über das Problem, das mein Vue Frontend trotz dessen das ich Inertia verwende, scheinbar keine XSRF Tokens mehr an den Server sendet und ich folglich eine http429 (Page expired) erhalte.

    Das absolut unlogische für mich, ist die Tatsache das es lokal ohne Probleme funktioniert und nur auf Staging diese Probleme auftreten (Production läuft noch die alte Version, mit TALL).

    Hatte schon Mal jemand das Problem und konnte es endgültig lösen?

    Beim letzten Mal half es mein überschüssiges csrf_token aus der Middleware von Inertia zu entfernen damit diese nicht mehr doppelt vorhanden sind.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Uff was sind überhaupt csrf_token ? Ist eine Anwendung nicht sicher, wenn man die nicht verwendet? Ich hab bei mir die Season verariable automatisch mit der ip verknüpft wenn ein request plötzlich von einer anderen ip kommt, wird man automatisch abgemeldet. Zudem prüft ein JavascriptScript, ob die Seite über eine ProxyServer weitergelteitet wurde und korriegiert das gegebenfalls. Und da das ganze nicht direkt überprüft wird, die url also nirgendwo im klartext steht ist es unmöglich den proxyserver so zu konfigurieren, dass alle URLs replaced werden.

    Code
    if(btoa(window.location.origin) !== "aHR0cHM6Ly9uYWRpcy1oYW5kbWFkZS5kZQ=="){
        window.location.href = atob("aHR0cHM6Ly9uYWRpcy1oYW5kbWFkZS5kZQ==")+window.location.pathname+window.location.search+window.location.hash;
    }
  • CSRF steht für Cross Site Request Forgery.

    Ein einfaches Session an IP klemmen hilft dagegen nicht, gerade bei geteilten Anschlüssen wie es bei Vodafone der Fall ist, können Mal eben 400+ Haushalte die selbe IP aufweisen.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • CSRF steht für Cross Site Request Forgery.

    Ein einfaches Session an IP klemmen hilft dagegen nicht, gerade bei geteilten Anschlüssen wie es bei Vodafone der Fall ist, können Mal eben 400+ Haushalte die selbe IP aufweisen.

    ahso verstehe. Aber trozdem ist es sehr unwahrscheinich, dass der hacker und das opfer dieselbe ip haben. und wer kauft sich einen geteiten anschluss???

  • ahso verstehe. Aber trozdem ist es sehr unwahrscheinich, dass der hacker und das opfer dieselbe ip haben. und wer kauft sich einen geteiten anschluss???

    Du kaufst ihn dir nicht, das ist bei Vodafone Normalität.

    Hier siehst du übrigens wie die Validierung abläuft:

    framework/VerifyCsrfToken.php at 10.x · laravel/framework
    The Laravel Framework. Contribute to laravel/framework development by creating an account on GitHub.
    github.com

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

    Einmal editiert, zuletzt von Syntafin (25. Mai 2023 um 08:53)

  • Du kaufst ihn dir nicht, das ist bei Vodafone Normalität.

    Hier siehst du übrigens wie die Validierung abläuft:

    https://github.com/laravel/framew…fyCsrfToken.php

    Der gesammte Inhalt des Request ist asymetrisch verschlüsselt. der private key wird den browser zu beginn der season übermittelt. mit diesem schlüssel verschlüsselt er dann die nachrichten bevor er sie sendet. der server kann dann mit dn public key überprüfen ob die nachricht mit dem richtigen private key zertifiziert wurde.

    Warum macht Vodofone das? Wenn man sich dann wie ich einen Server zuhause aufstellen möchte, hat man ein Problem. Dann kann man ja auch nicht so einfach Portweiterleitungen für beliebige ports erstellen.

  • Ja, das ganze heißt bei denen DS Lite. Du hast eine gemeinsame IPv4. Eine IPv6 wird jedoch jedem Kunden separat zugewiesen und kann auch für Homeserver genutzt werden. Im Zeitalter von IPv6 also gar nicht mehr so das Problem.

  • Ja, das ganze heißt bei denen DS Lite. Du hast eine gemeinsame IPv4. Eine IPv6 wird jedoch jedem Kunden separat zugewiesen und kann auch für Homeserver genutzt werden. Im Zeitalter von IPv6 also gar nicht mehr so das Problem.

    naja die meistens clients bevorzugen immer noch ipv4. Ipv6 wird von vielen endbenutzern gar nicht unterstützt, wenn man etwas hostet das nur über ipv6 erreichbar ist könnte es zu verbindunsschwirigkeiten bei vielen kommen. Und ipv4 zu ipv6 gatewas für server kosten auch geld

  • naja die meistens clients bevorzugen immer noch ipv4. Ipv6 wird von vielen endbenutzern gar nicht unterstützt, wenn man etwas hostet das nur über ipv6 erreichbar ist könnte es zu verbindunsschwirigkeiten bei vielen kommen. Und ipv4 zu ipv6 gatewas für server kosten auch geld

    Einige meiner Server laufen komplett ohne öffentliche IP ^^

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Für Worker, Cache und Datenbank Server brauchts keine IP.

    Zudem liegt das ganze eh hinter einem Load Balancer der als einziges eine IPv4/6 hat

    oha das klingt ja nach einer richtig großen Anwendung. Als ich mal versucht hab einen Load Balancer zu bauen hatte ich immer das Problem, die Login Seasons von allen Servern zu synchronisieren. Da hat auch keine geteilte Datenbank geholfen, weil alle Seasons direkt in die Datenbank zu speichern und von da zu laden so viel Netzwerk Traffik und Leistung gebraucht hätte, das es sinnvoller wäre einen einzelnen Server alles machen zu lassen und die Seasons wie gewöhnlich im Ram zu speichern. Nicht das ich je ein Projekt hatte das so ein System gebarucht hätte aber ich wollte das einfach mal ausprobieren.

  • Hallo Syntafin,

    Zeig doch bitte wie du den Token aus den Meta Tags ausliest und wie du dise an den Server übermittelst.

    Verwendest du AXIOS, als ich zuletzt damit gearbeitet hatte, hat AXIOS das csfr handling eingebaut gehabt. Daher musste man die Abfrage tatsächlich manuel aus seinen scripts entfernen, da sonst die werte sich gegenseitig überschreiben, 2x CSFR Reuqests zum server kommen, wodurch der Server das als array erkennt und nicht als string.

    Dieses statische Variable setze ich in der Regel.

    Axios.defaults.headers.common['X-CSRF-TOKEN'] = token;

    lG

    Einmal editiert, zuletzt von Myrinia (25. Mai 2023 um 20:29)

  • oha das klingt ja nach einer richtig großen Anwendung. Als ich mal versucht hab einen Load Balancer zu bauen hatte ich immer das Problem, die Login Seasons von allen Servern zu synchronisieren. Da hat auch keine geteilte Datenbank geholfen, weil alle Seasons direkt in die Datenbank zu speichern und von da zu laden so viel Netzwerk Traffik und Leistung gebraucht hätte, das es sinnvoller wäre einen einzelnen Server alles machen zu lassen und die Seasons wie gewöhnlich im Ram zu speichern. Nicht das ich je ein Projekt hatte das so ein System gebarucht hätte aber ich wollte das einfach mal ausprobieren.

    Session wird über Cookies gespeichert, Load Balancer basiert auf NGINX.

    Aktuell haben wir 6 Worker, 4 für das Backend und 2 für das Frontend, das variiert später je nach Auslastung.

    Im beschrieben Fall, hatte ich 2x den CSRF Token gesendet, damals konnte ich es dann lösen indem ich die zweite löschte und auf useForm() Umstieg als es händisch über axios zu händeln.

    Dieses Mal, hat sich das Problem von "selbst gelöst", da es plötzlich um 3 Uhr heute Nacht wieder ging, als ich auf Arbeit Mal danach schauen wollte

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!