Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    sicurezza di un form.validare una select dinamica

    Buona sera a tutti. Sono costretto ad assillarvi di nuovo con un mio dilemma.

    Allora, io ho un form che invia dei dati ad un database. Tra questi campi c'è un menù a tendina che limita la scelta ad alcune voci recuperate da una tabella del mio db.

    Quindi nella pagina del form faccio una prima query per generare dinamicamente la mia select.
    Leggendo qua e la nel forum ho capito che si può facilmente creare un form fittizio avente la stessa action "ufficiale" e modificare quindi i dati. Il mio menù a tendina potrebbe quindi diventare un semplice campo di testo in cui uno invia ciò che gli pare.

    Devo perciò validare il mio input. Se ho capito bene è sufficiente che verifichi che il valore inserito rientri tra quelli plausibili.
    Quindi faccio così, mi creo un array con le voci consentite

    while ($row = mysql_fetch_assoc($queryValoriAmmessii) )
    $valoriAmmessi[] = $row['valoreAmmesso'];

    recupero il valore dal form
    $valore = in_array($_POST['valore'],$valoriAmmessi) ? $_POST['valore'] : exit('valore non ammesso');

    Arrivo al punto.
    1) E' giusto il mio ragionamento?
    2) Devo fare per forza due volte la stessa query, una prima volta per crearmi il menù a tendina e una seconda volta per accertarmi che il valore sia valido?
    Notare che non posso usare un array perchè la select può essere modificata dall'amministratore del sito e quindi le sue voci possono aumentare e non so a priori di quali elementi l'array sarà composto.

    Scusate se mi sono dilungato ma volevo essere abbastanza chiaro.
    Attendo come sempre i vostri preziosi consigli.

  2. #2
    Utente di HTML.it L'avatar di zakros
    Registrato dal
    Oct 2000
    Messaggi
    509
    Se nn sai a priori i campi del menu' a tendina, è giusto il tuo ragionamento, una volta inviato il form fai una query con il dato selezionato in caso di esito negativo lo rimandi al form.

  3. #3
    grazie zakros per la risposta. il mio dubbio nasce dal fatto che di select dinamiche nel mio form ne ho 5. Ciò significa che ancor prima di fare la query di inserimento mi troverei costretto a fare già 10 query (5 per crearmi i menu a tendina nel form e altrettante per poi verificare che i valori siano corretti). Mi domandavo se ciò non fosse eccessivo e se ci fosse qualche trucco che magari mi sfugge per evitare quanto meno di fare due volte le stesse query per le due pagine.

  4. #4
    Utente di HTML.it L'avatar di zakros
    Registrato dal
    Oct 2000
    Messaggi
    509
    Potresti usare i cookie o le session per memorizzare i dati fatti dalla prima query,e confrontarli una volta inviato il form, pero' la cosa + semplice e fare le query, anche perche sono leggerissime.

  5. #5
    Ti ringrazio per il consiglio. Ho provato a usare le sessioni e la prima impressione è che sia tutto ok. Non sapevo che in una variabile di sessione si potesse memorizzare un array. Infatti all'inizio mi dava errore quando andavo a fare il controllo sull'operatore ternario. Poi ci ho aggiunto altre due parentesi quadre per renderlo bidimensionale e come per magia ha funzionato.
    Già così dimezzo le query.

    Ho fatto così

    codice:
    // questa è la pagina del form con session_start() ovviamente
    $_SESSION['centri'] = array();
    
    $queryCentri = mysql_query("SELECT centro FROM centri order by idcentro") or die(mysql_error());
                                  <?php
    				while ($row = mysql_fetch_assoc($queryCentri)) {
    					$_SESSION['centri'][] = $row['centro'];
    		  			echo "<option value=\"$row[centro]\">$row[centro]</option>";
    				}	?> ....
    
    // e questa è la pagina che riceve i dati del form che fa il controllo
    $centro = in_array($_POST['centro'],$_SESSION['centri']) ? $_POST['centro'] : exit('valore centro non ammesso');
    Se qualcun altro mi conferma che questo è il modo migliore di procedere e che non ho tralasciato niente mi toglie una preoccupazione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.