Un utente può manomettere il codice lato client per ignorare la disinfezione HTML, se sì, come posso impedirlo?

1

Nel mio codice, la prima chiamata AJAX al server controlla il recaptcha e disinfetta i dati.

C'è un modo per un utente malintenzionato di saltare quel processo?

Poiché si tratta di un javascript lato client, potrebbe semplicemente inserire l'email e la password nel codice di creazione utente Firebase modificando il codice?

In realtà, l'utente può modificare il mio codice lato client per saltare i miei meccanismi di protezione?

$("#registerForm").submit(function(e) {

        e.preventDefault();
        var username = $("#username").val();
        var email = $("#email").val(); 
        var password = $("#password").val(); 
        var confirmPassword = $("#confirmPassword").val();
        var referer = $("#referer").val();

        $this = $(this);
        $.ajax({
            type: "POST",
            url: "register",
            data: $this.serialize()
        }).done(function(data) {

            if (data) {

                    firebase.auth().createUserWithEmailAndPassword(data.email, data.password).then(userData => {

                        $.ajax({
                            type: "POST",
                            url: "register2",
                            data: userData.serialize()
                        }).done(function(result) {
                           if (result == "WORKED!") {
                                localStorage.setItem('success_msg_local', "Please check your inbox. You have 1 hour to confirm your email address. Failing to do so will delete the account and let you register again.");
                                window.location.href="/users/register";
                           }
                           else if (result == "FAILED1!") {
                               firebase.auth().signOut().then(function() {
                                   localStorage.setItem('error_msg_local', 'Failed to Register. Try again.');
                                   window.location.href="/users/register";
                               });  
                           }
                           else if (result == "FAILED2!") {
                                firebase.auth().signOut().then(function() {
                                     localStorage.setItem('error_msg_local', 'Failed to Register. An error occured. Please try again later.');
                                     window.location.href="/users/register";
                                });
                           }
                        });

                    },function(error) {
                            var errorCode = error.code;
                            var errorMessage = error.message;
                            ("ERROR 3: "+ errorCode +" "+errorMessage);
                            localStorage.setItem('error_msg_local',  'Failed to Register. Please wait 1 hour before trying again.');
                            window.location.href="/users/register";
                    });
            }
            else {
                localStorage.setItem('error_msg_local',  'Recaptcha failed'); window.location.href = "/users/register";
            }

        }).fail(function( jqXHR, textStatus ) {
            alert( "Request failed: " + textStatus );
        });

    });
    
posta TheProgrammer 12.06.2017 - 13:23
fonte

1 risposta

3

Non si può mai essere sicuri di ciò che accade lato client. Il client potrebbe essere solo una sessione netcat o uno script Python che invierà richieste HTTP forgiate al tuo server. Simulare le chiamate Ajax è davvero un incubo, ma dopo aver spiato alcuni normali scambi di browser con gli strumenti di debug di un browser e / o una spia della rete come wireshark , è possibile se non è facile passare richieste forged al server.

Non posso rispondere formalmente sì alla domanda il [cliente] potrebbe semplicemente inserire l'email e la password nel codice di creazione utente Firebase modificando il codice? , perché non sono né un Ajax né un esperto di Firebase. Ma sono abbastanza sicuro che qualsiasi meccanismo di protezione lato client possa essere passato dopo un po 'di lavoro.

Quindi l'unico modo sicuro è di mettere più sanificazioni possibili nel codice Ajax del client, perché ciò che viene fatto lato client dà una buona esperienza utente e non causa alcun carico sul server, ma sempre scrivere un lato server di controllo completo, supponendo che qualsiasi verifica del client possa essere stata ignorata.

    
risposta data 12.06.2017 - 15:23
fonte

Leggi altre domande sui tag