Dove iniziare a filtrare l'input POST con MVC? [PHP]

1

La mia domanda riguarda più la pratica del design, ma dove dovrei iniziare il filtraggio? Ho pensato che la classe sarebbe stata il posto migliore, ma non avrebbe messo a rischio l'oggetto istanziato ($ objReg) per l'iniezione di codice usando variabili POST non filtrate come quella?

Come faccio a risolvere questo problema? C'è un design migliore per questo?

Index.php è il gestore di tutte le chiamate. Quindi per esempio chiamerà register.php function regist2 () (cioè index.php? Action = register2), e la funzione a sua volta istanzia l'oggetto come visto di seguito.

Questa è la tua sicurezza? Sto cercando di seguire i principi DRY e OOD per evitare confusione.

codice principale @ register.php (include ommited):

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

clean class @ security.php:

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

classe di registrazione @ register.class (metodo di registrazione omesso):

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);
                    }
                }
    }
    
posta Kevin 20.03.2017 - 09:22
fonte

1 risposta

0

Penso che questo design non sia male, ma di solito la sanitizzazione viene eseguita in controller in un progetto di architettura MVC. Penso che il motivo sia che dovrebbe essere fatto il prima possibile, quindi forse puoi fare il filtraggio prima di chiamare la tua classe:

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);
}

In questo modo si passano i parametri alla classe già filtrata. La funzionalità sarà la stessa, ma questo è il modo in cui è fatto di solito.

Per quanto riguarda il modo di filtrare ... Se la tua versione php è > = 5.2.0, puoi usare la funzione filter_var che è molto bello per questo. Ha molti tipi di filtri che dipendono dall'uso della var. Puoi vederli qui .

    
risposta data 20.03.2017 - 11:29
fonte

Leggi altre domande sui tag