Dubbio Su Sicurezza Input Utente

Ciao a tutti!

Ho appena scoperto Yii.

Mi sono letto tutta la guida e la documentazione.

Ho sempre fatto siti scrivendo a mano tutto, e ora vorrei velocizzarmi e migliorami con Yii.

Ho un dubbio al quale non ho trovato risposta.

Gli input dell’utente, form di contatto o login o qualsiasi altro, i quali vengono salvati nel database o usati per una ricerca nel database o semplicemente passati alla pagina successiva…

Come si fa a controllarli e renderli sicuri? per prevenire qualsiasi tipo di injection o attacco?

Yii lo fa in automatico quando faccio le query o ci sono delle classi che devo richiamare ogni volta per ogni input?

Faccio un esempio cosi magari mi spiego meglio:

io ad ogni input faccio il trim, converto i caratteri speciali in entità html, controllo con preg match l’input in modo da evitare per esempio sql injection.

Grazie

Quello che ti serve lo trovi qui:

http://www.yiiframework.com/doc/guide/1.1/en/topics.security

ti anticipo un pezzettino:




return array(

    'components'=>array(

        'request'=>array(

            'enableCsrfValidation'=>true,

        ),

    ),

);



ma è meglio leggere tutta la pagina per comprendere che cosa si sta facendo.

si avevo letto quella pagina ma non parla del filtraggio dei valori provenienti dagli input.

Per esempio non parla di come difendersi da sql injection.

Non riesco a capire se quando faccio il validate dei valori lui in automatico fa l’escape degli apostrofi, se converte i caratteri speciali ecc ecc o se devo farlo io manualmente per ogni valore come si farebbe normalmente scrivendo tutto il codice a mano senza usare framework.

non so se sono riuscito a fare capire quello che intendo

EDIT:

per esempio se io faccio


$post->attributes=$_POST['Post'];

lui in automatico mi salva il valore dal $_POST e mi fa per esempio gli escape degli apici ecc? Vorrei capire cosa succede e cosa fa Yii automaticamente.

o stessa domanda per questo:


$criteria->addcondition("field= :field");

$criteria->params(':field'=>$userInputedField);

Capito. Nella pagina che parla dell’active record dice questo:

Se vuoi vedere meglio come lavora Yii, guarda direttamente il codice. In ogni caso si: le query non scritte a mano si occupano da sole di quel tipo di sicurezza.

ah ok perfetto, grazie mille.

ora do un occhiata ai file in questione e vedo se riesco a capire qualcosa. altrimenti chiedo :)

Grazie

Tienici aggiornati =).

Gli attibuti che assegni con:

$model->attributes=$_POST[‘cammello’]

Vengono protetti dalle sql injection (addSlashes).

Anche i parametri delle query vengono slashati, per cui fare cosi’ va bene:


Cammello::model()->findAll(array('condition'=>'nome= :nome', 'params'=>array(':nome'=>$_GET['nome'])))

Fare cosi’ va male:


Cammello::model()->findAll(array('condition'=>'nome= "'.$_GET['nome'].'"', ))

Non salvare le html entities nel database, salva quello che ti arriva, altrimenti ti sbaglia gli ordinamenti alfabetici come per esempio:

pesca

pesco’ (con l’accento)

Vengono sbagliati.

Assicurati che l’encoding sia dappertutto utf8 e non avrai problemi.

Wow grazie mille della spiegazione! Era proprio quello che volevo sentire. Avevo provato a cercare tra i file del framework senza successo…

Posso chiederti un informazione veloce? Su che file di yii devo guardare per trovare la funzione/classe che fa questo? solo per curiosità per vedere com’è implementata la cosa (vorrei capire come funzione)

Grazie mille!

Non le trovi queste funzioni, i parametri vengono puliti dalla bindValue del PDO, in sostanza sono puliti dalla libreria di connessione al server sql che stai usando

ah ok. Grazie mille ancora