CSRF Schutz

  • Hey zusammen,


    ich bin grad dabei meine Formulare vor Cross Site Request Forgery-Angriffen zu schützen.


    Ich habe Formulare welche über Javascript angezeigt werden und zum Teil ausgewertet werden. Nun habe ich mir überlegt wie ich den gleichen Token aus PHP in das Formular in den JS-Dateien reinbekomme. Ich habe versucht PHP Code in einer JS-Datei auszuführen. Jedoch ohne Erfolg.

    Ist es nicht unlogisch mit JS diesen Token zu erstellen und zu verwalten weil JS ja manipulierbar ist und der Angreifer ja jederzeit diesen Token ermitteln kann ?


    Grüße,

    Stef

  • Meinst du das so mit den token ins Javascript zu bekommen ?

  • Hey,


    ja genau das meine ich. Nur das Problem ist, dass die Javascript-Datei ausgelagert ist und eine reine JS-Datei ist.

    Nicht so wie in deinem Beispiel eine PHP-Datei.


    Grüße,

    Stef

  • wie wäre es damit




    Oder du bennenst deine js datei in php um und bindest die als script ein. Das habe ich auch schon mal gesehen,aber da müßte ich erst kucken wo das genau wahr und wie

  • Sicherheitsrelevante Token o.ä. in JavaScript zu erstellen ist selten eine gute Idee, da Client seitig, manipuier- einsehbar, usw.

    Gerade aus Sicherheitssicht sollte das alles Server seitig bspw. mit PHP erfolgen. Auch die Verarbeitung sollte grundlegend auf dem Server ausgewertet werden.

    Mit Javascript kann man eine "Vor"-Prüfung machen, um die Usability zu erhöhen. Mehr sollte man damit aber auch nicht machen.

  • Hey,


    Das habe ich mir auch gedacht. Ich hatte, bzw. Habe nicht vor in JavaScript den Token zu generieren.


    Das Problem wie gesagt ist, dass ich keine Möglichkeit habe den Token, welcher in PHP generiert wird in das Formular welches mit JavaScript erstellt ist hineinzubekommen.


    Die Function wird bei einem Click auf einen Button ausgeführt, in der function addEventListener behandelt. Nun kann ich aber die Funktion nicht davor aufrufen , weil die Funktion sonst nicht dies erfüllt was ich mir wünsche.


    Mein Problem ist es wie ich diesen PHP generierten Token in die reine JS-Datei reinbekomme.


    Daran scheitert es.


    Grüße,

    Stef

  • Das muss auch nicht in irgendeine reine JS-Datei.

    PHP
    <?php
    $tooManySecrets = 'var token="youcantseeme"';
    ?>
    ...
    <script type="text/javascript"><?php echo $tooManySecrets; ?></script>
    <script type="text/javascript" src="deine-reine-js-datei.js"></script>

    In Deiner JS hast Du Zugriff auf die Variable token.

  • :thumbup: ,das ist ja mal eine Simple und einfache Lösung wie man die Variable zum Js bekommt.

    Eigentlich vollkommen logisch,aber da bin ich auch noch nie drauf gekommen. Damit kann ich einge Ajax Lösungen weglassen. Immer wenn ich nicht weiter wußte mußte ajax her oder andere umwege ,aber hier mit geht es ja noch besser8):thumbup:

  • Hey,


    ich habe es gerade mal getestet. Jedoch funktioniert dies nicht. Desweiteren wird der Token dann im Quellcode sichtbar und dann ergibt dies auch keinen Sinn.

    In der JS-Datei kommt vom token auch nichts an.


    Das ist mein Versuch (nur die relevanten Codezeilen):


    PHP
    <?php 
    
    $tokenForJs = 'var token="' . $csrfToken . '"';
    
    ?>
    
    <script type="text/javascript"><?php echo $tokenForJs; ?></script>
    <script src="../js/manageUser.js"></script>


    Die Ausgabe im Quellcode:

    Code
    <script type="text/javascript">var token="c67893e77932c066eac17bad12859027751cfd6586f62c41c962cbe2eb4db752"</script>
    <script src="../js/manageUser.js"></script>


    Grüße,

    Stef

  • Desweiteren wird der Token dann im Quellcode sichtbar und dann ergibt dies auch keinen Sinn.

    Der Token wird immer sichtbar, zumindest aber immer auffindbar sein, bei einer JS Lösung, das ist das sinnlose daran.

    Selbst wenn Du es in Deine reine JS-Datei bekommst, kann ich diese über meine Developer-Tools im Browser einsehen und alles lesen.


    Wie schon eingangs erwähnt, gehört eine Token-Prüfung auch nicht auf Client Seite!

  • Hey,


    Ja. Das bringt dann nicht viel, was ich mir auch gedacht habe.


    Dann lasse ich es. Weil das Formular Clientseitig erstellt und ausgegeben wird und eben es nichts bringt den Token Clientseitig zu erstellen, weil dort jeder diesen auslesen kann.


    Grüße,

    Stef

  • Hey,


    das Formular wird Clientseitig erstellt weil ich dieses bei einem Klick auf den Button ohne Seitenneuladung anzeigen möchte.


    Mit Ajax das Formular zu laden geht nicht, weil dann der Submit Button nicht mehr die Seite neuladet. Das hatte ich schonmal bereits ausgetestet.


    Grüße,

    Stef

  • Mit Ajax das Formular zu laden geht nicht, weil dann der Submit Button nicht mehr die Seite neuladet. Das hatte ich schonmal bereits ausgetestet.

    Warum lädt der Submit-Button dann nicht neu? Da würde ich eher ansetzen.

    Zeig doch sonst mal Dein Script, vielleicht kann man ja auf die Schnelle was erkennen...

Jetzt mitmachen!

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