JavaScript: Wie baue ich einen sicheren GET-Req zusammen?



  • Moin, schaut mal:

    <form action="javascript:;" onsubmit=" myFunction( this ) ">
        <label for="f1">Datum:</label><br>
        <input type="text" id="f1" name="f1" value="2023-11-15T17:15"><br>
    
        <input type="radio" id="f2" name="wer" value="a">
        <label for="f2">a</label><br>
        <input type="radio" id="f3" name="wer" value="b">
        <label for="f3">b</label><br>
    
        <label for="f4">Betrag:</label><br>
        <input type="text" id="f4" name="f4" value="100.00"><br>
    
        <label for="f5">Vorher:</label><br>
        <input type="text" id="f5" name="f5" value="0.0"><br>
    
        <button type="submit">
            Let's do it
        </button>
    </form>
    <script>
        async function myFunction( form ) {
            let date = new Date(form.f1.value);
            let wann = date.getTime();
            let wer = form.wer.value;
            let betrag = form.f4.value;
            let vorher = form.f5.value;
            let s = `wann=${wann}&wer=${wer}&betrag=${betrag}&vorher=${vorher}`;
            let response = await fetch("tagebuch/add?" + s);
            let ok = await response.text();
            alert( ok );
            location.reload();
        }
    </script>
    

    Wie baue ich in Zeile 27 den String zusammen, sodass beim Backend kein Müll ankommt? Ich weiß, man sollte immer auf beiden Seiten prüfen, aber jetzt kann ja einfach Nonsense vom Benutzer eingegeben werden ...



  • Ok, Zeile 27 könnte ich als URL codieren. Das ginge in JS mit:

    var myOtherUrl = 
           "http://example.com/index.html?url=" + encodeURIComponent(myUrl);
    

    Aber die Sache ist: Das Backend muss ohnehin mit ALLEN Get-Requests korrekt umgehen können + prüfen können, ob nur ein gültiger long-, ein gültiger char- (a oder b), ein gültiger double- und noch ein gültiger double-Wert ankommt. Wenn nicht, dann ist das einfach noise, und kann verworfen werden.

    Das heißt, ich brauche mir den zusätzlichen Aufwand im Frontend gar nicht machen.

    Das Thema ist schon gelöst.


Log in to reply