¿Dónde comenzar a filtrar la entrada POST con MVC? [PHP]

1

Mi pregunta es más sobre la práctica del diseño, pero ¿dónde debería comenzar el filtrado? Pensé que la clase sería el mejor lugar para ello, pero ¿no pondría eso al objeto instanciado ($ objReg) en riesgo de inyección de código usando variables POST sin filtrar de esa manera?

¿Cómo puedo solucionar este problema? ¿Hay un mejor diseño para esto?

Index.php es el controlador para todas las llamadas. Así, por ejemplo, llamará a register.php la función register2 () (es decir, index.php? Action = register2), y la función a su vez crea una instancia del objeto como se ve a continuación.

¿Crees que esto es seguro? Intento seguir los principios DRY y OOD para evitar confusiones.

código principal @ register.php (incluye ommited):

function register2(){
            $objReg = new registration($_POST['username'],$_POST['password'],$_POST['email']);
            $objReg->register();
            unset($objReg);
}

limpia clase @ seguridad.php:

class clean
{
    public function process($data)
    {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
}

registration class @ register.class (método de registro omitido):

class registration
    {
        // Registration stuffs
        private $regUser = NULL;
        private $regPass = NULL;
        private $regEmail = NULL;

        public function __construct($regName, $regPass, $regEmail)
                {
                    //Set the class properties if they aren't NULL.
                    if (!empty($regName) AND !empty($regPass) AND !empty($regEmail)){
                        $objClean = new clean;
                        $this->regUser  = $objClean->process($regName);
                        $this->regPass  = $objClean->process($regPass);
                        $this->regEmail = $objClean->process($regEmail);
                        unset($objClean);
                    }
                }
    }
    
pregunta Kevin 20.03.2017 - 09:22
fuente

1 respuesta

0

Creo que este diseño no es malo, pero normalmente el saneamiento se realiza en el controlador en un diseño de arquitectura MVC. Creo que la razón es que se debe hacer lo antes posible, así que quizás puedas hacer el filtrado antes de llamar a tu clase:

function register2(){

    $objClean = new clean;

    $username = $objClean->process($_POST['username']);
    $password = $objClean->process($_POST['password']);
    $email = $objClean->process($_POST['email']);

    $objReg = new registration($username,$password,$email);
    $objReg->register();
    unset($objReg);
}

De esta manera pasas los parámetros a la clase ya filtrada. La funcionalidad será la misma, pero así es como se hace normalmente.

Con respecto a la forma de filtrar ... Si su versión de php es > = 5.2.0, puede usar la función filter_var que es muy bueno para esto. Tiene muchos tipos de filtros dependiendo del uso de la var. Puede verlos aquí .

    
respondido por el OscarAkaElvis 20.03.2017 - 11:29
fuente

Lea otras preguntas en las etiquetas