¿Puede un usuario manipular el código del lado de mi cliente para omitir el saneamiento de HTML? Si es así, ¿cómo puedo evitarlo?

1

En mi código, la primera llamada AJAX al servidor comprueba la recaptcha y desinfecta los datos.

¿Hay una manera para que un usuario malintencionado omita ese proceso?

Ya que este es un javascript del lado del cliente, ¿podría simplemente completar el correo electrónico y la contraseña en el código de creación del usuario de Firebase al editar el código?

En realidad, ¿puede el usuario editar el código del lado de mi cliente para omitir mis mecanismos de protección?

$("#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 );
        });

    });
    
pregunta TheProgrammer 12.06.2017 - 13:23
fuente

1 respuesta

3

Nunca puedes estar seguro de lo que sucede en el lado del cliente. El cliente podría ser solo una sesión de netcat o un script de Python que enviará solicitudes HTTP falsificadas a su servidor. Simular las llamadas de Ajax es de hecho una pesadilla, pero después de espiar algunos intercambios normales de navegador con las herramientas de depuración de un navegador y / o un espía de red como wireshark Es posible, si no es fácil, pasar las solicitudes falsificadas al servidor.

No puedo responder formalmente a la pregunta ¿podría [el cliente] simplemente completar el correo electrónico y la contraseña en el código de creación de usuario de Firebase al editar el código? , porque no soy un Ajax ni un experto en Firebase. Pero estoy bastante seguro de que cualquier mecanismo de protección del lado del cliente se puede pasar después de algún trabajo.

Por lo tanto, la única forma segura es poner la mayor cantidad posible de desinfección en el código Ajax del cliente, ya que lo que se hace del lado del cliente proporciona una experiencia agradable al usuario y no causa carga en el servidor, pero siempre escriba un lado del servidor de control total, asumiendo que cualquier verificación del cliente se pudo haber pasado por alto.

    
respondido por el Serge Ballesta 12.06.2017 - 15:23
fuente

Lea otras preguntas en las etiquetas