1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

CSRF Probleme

    • PHP
  • Syntafin
  • 25. Mai 2023 um 01:00
  • Unerledigt
  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 01:00
    • #1

    Ä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...

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 25. Mai 2023 um 06:45
    • #2

    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;
    }
  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 06:48
    • #3

    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...

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 25. Mai 2023 um 08:02
    • #4
    Zitat von Syntafin

    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???

  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 08:45
    • #5
    Zitat von flyingtable07

    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)

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 25. Mai 2023 um 13:27
    • #6
    Zitat von Syntafin

    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.

  • martin
    14
    martin
    Mitglied
    Reaktionen
    69
    Punkte
    1.904
    Beiträge
    359
    • 25. Mai 2023 um 14:03
    • #7
    Zitat von flyingtable07

    Warum macht Vodofone das?

    Mangel an IPv4-Adressen. Außerdem ist es billiger, viele Kunden per CGNat an eine IP zu hängen.

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 25. Mai 2023 um 15:51
    • #8
    Zitat von martin

    Mangel an IPv4-Adressen. Außerdem ist es billiger, viele Kunden per CGNat an eine IP zu hängen.

    Wissen das die Kunden?

  • ai3x
    1
    ai3x
    Gast
    • 25. Mai 2023 um 16:26
    • #9

    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.

  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 16:32
    • #10

    Zeitalter von IPv6, darauf wartet man seit 10 Jahren und es ist noch immer nicht.

    Aber könnte man hier zum Thema zurück kommen?

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

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 25. Mai 2023 um 18:01
    • #11
    Zitat von ai3x

    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

  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 18:12
    • #12
    Zitat von flyingtable07

    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 :grinning_face_with_smiling_eyes:

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

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 25. Mai 2023 um 18:19
    • #13
    Zitat von Syntafin

    Einige meiner Server laufen komplett ohne öffentliche IP :grinning_face_with_smiling_eyes:

    und wie hast du das hingekriegt? über einen proxy im selben netzwerk?

  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 18:33
    • #14
    Zitat von flyingtable07

    und wie hast du das hingekriegt? über einen proxy im selben netzwerk?

    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

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

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 25. Mai 2023 um 20:17
    • #15
    Zitat von Syntafin

    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.

  • Myrinia
    3
    Myrinia
    Mitglied
    Reaktionen
    12
    Punkte
    67
    Beiträge
    11
    • 25. Mai 2023 um 20:23
    • #16

    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)

  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 20:53
    • #17
    Zitat von flyingtable07

    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.

    Zitat von Myrinia

    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

    Alles anzeigen

    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...

  • Myrinia
    3
    Myrinia
    Mitglied
    Reaktionen
    12
    Punkte
    67
    Beiträge
    11
    • 25. Mai 2023 um 21:29
    • #18

    Syntafin Hast du einen AdBlocker installiert oder ein Browser Plugin, welches die Header vor dem Absenden verändert ?

    lG

  • Online
    Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.773
    Trophäen
    2
    Beiträge
    1.412
    • 25. Mai 2023 um 22:04
    • #19
    Zitat von Myrinia

    Syntafin Hast du einen AdBlocker installiert oder ein Browser Plugin, welches die Header vor dem Absenden verändert ?

    lG

    Adblocker den eingebauten. Und wenn das so wäre, wäre das ja auch Local und Production und nicht nur auf Staging :)

    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!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern