Domanda

sto ricondizionando php sul codice zend e tutto il codice è pieno di $ _GET [" this "] e $ _POST [" that "] . Ho sempre usato più phpish $ this- > _request- > getPost ('this') e $ this- > _request- > getQuery ('that') (questo non è molto logico con getquery invece di getGet).

Quindi mi chiedevo se il mio metodo fosse più sicuro / migliore / più facile da mantenere. Ho letto nella documentazione di Zend Framework che è necessario convalidare il proprio input poiché l'oggetto richiesta non lo farà.

Questo mi lascia con 2 domande:

  • Cosa c'è di meglio di questi due? (o se esiste un altro modo migliore)
  • Qual è la migliore pratica per convalidare l'input php con questi metodi?

Grazie!

È stato utile?

Soluzione

Di solito uso $ this- > _request- > getParams (); per recuperare i parametri post o URL. Quindi utilizzo Zend_Filter_Input per eseguire la convalida e il filtro. GetParams () non esegue la convalida.

Usando Zend_Filter_Input puoi fare la validazione a livello di applicazione, usando Zend Validators (o puoi anche scrivere il tuo). Ad esempio, puoi assicurarti che il campo "mesi" sia un numero:

$data = $this->_request->getParams();

$validators = array(
    'month'   => 'Digits',
);

$input = new Zend_Filter_Input($filters, $validators, $data);

Altri suggerimenti

Estensione della risposta di Brian.

Come hai notato, puoi anche dare un'occhiata a $ this- > _request- > getPost () e $ this- > _request- > getQuery () . Se ti generalizzi su getParams () , è un po 'come usare il superglobal $ _REQUEST e non credo sia accettabile in termini di sicurezza.

In aggiunta a Zend_Filter, puoi anche usare PHP semplice per trasmettere il necessario.

Esempio:

$id = (int) $this->_request->getQuery('id');

Per altri valori, diventa più complicato, quindi assicurati di es. citazione nelle tue query DB ( Zend_Db , vedi citando gli identificativi, $ db- > quoteIdentifier () ) e nelle viste usa $ this- > escape ($ var); per sfuggire al contenuto.

Non è possibile scrivere una funzione di convalida adatta per tutti per ottenere / pubblicare dati. Come in alcuni casi è necessario che un campo sia un numero intero e in altri una data, ad esempio. Ecco perché non esiste alcuna convalida dell'input nel framework zend.

Dovrai scrivere il codice di convalida nel luogo in cui ne hai bisogno. Ovviamente puoi scrivere alcuni metodi di supporto, ma non puoi aspettarti che getPost () convalidi qualcosa per te da solo ...

E non è nemmeno il posto di getPost / getQuery per convalidare nulla, il suo compito è quello di ottenere i dati che non si desidera, ciò che accade da lì in poi non dovrebbe essere un problema.

$dataGet  = $this->getRequest()->getParam('id',null);
$valid = new Zend_Validate_Digits();

if( isset($dataGet) && $valid->isValid($dataGet) ){
 // do some...
} else{
  // not set
}
  

Ho sempre usato più phpish $ this- > _request- > getPost ('this') e $ this- > _request- > getQuery ('that' ) (questo non è molto logico con getquery invece di getGet).

     

Cosa c'è di meglio di questi due? (o se esiste un altro modo migliore)

Solo una breve spiegazione sulla scelta di getQuery () . La scelta del testo deriva dal tipo di dati, non da come sono arrivati. GET e POST sono solo metodi di richiesta, che trasportano tutti i tipi di informazioni, tra cui, nel caso di una richiesta POST, una sezione nota come "post data data". Una richiesta GET non ha tale blocco, i dati variabili che trasporta fanno parte della stringa di query dell'URL (la parte dopo il?).

Quindi, mentre getPost () ottiene i dati dalla sezione post data di una richiesta POST, getQuery () recupera i dati dalla stringa di query di un GET o Richiesta POST (così come altri metodi di richiesta HTTP).

(Nota che le richieste GET non devono essere utilizzate per qualsiasi cosa che possa produrre un effetto collaterale, come la modifica di una riga DB)

Quindi, in risposta alla tua prima domanda, usa i metodi getPost () e getQuery () , in questo modo, puoi essere sicuro di dove l'origine dati ( se non ti interessa, getParams () funziona anche, ma può includere dati aggiuntivi).

  

Qual è la migliore pratica per convalidare l'input php con questi metodi?

Il posto migliore per convalidare l'input è dove prima lo usi. Vale a dire, quando lo si estrae da getParams () , getPost () o getQuery () . In questo modo, i tuoi dati sono sempre corretti per dove ne hai bisogno e, se li trasferisci, sai che sono al sicuro. Tieni presente che se lo passi a un altro controller (o azione del controller), probabilmente dovresti controllarlo di nuovo lì, solo per sicurezza. Il modo in cui lo fai dipende dalla tua applicazione, ma deve comunque essere verificato.

non direttamente correlato all'argomento, ma per assicurarti di ottenere un numero nel tuo input, puoi anche usare $ var + 0 (tuttavia se $ var è un float rimane un float) è possibile utilizzare nella maggior parte dei casi $ id = $ this- > _request- > getQuery ('id') +0 ;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top