Ciao a tutti, sto sviluppando da un po questo sito web che ora è su araim.altervista.org,
e mi sto accorgendo di aver, a volte, trascurato delle possibili "falle" nel mio spazio web.
Considerando che un cracker non verrà certo a rompere le scatole ad un mio spazio,
ma non è da escludersi un LAMER, c'è modo di evitare situazioni spiacevoli nel passagio
dei dati anche semplicemente con i link??
Nel senso: devo aprire una scheda utente, potrei usare le variabili SESSIONE per fissare
l'utente eventualmente modificabile?? Apro la scheda di un utente, e nel momento in
cui la apro, creo una $_SESSION['schedavisualizzata'] che poi userò nell'eventualità
io clicchi su "modifica" potendo naturalmente intevenire come utente stesso o moderatore?
Quali accorgimenti dovrei provare ad adottare?
Ultima modifica di araim : 27-03-2009 alle ore 17.29.49Motivo: orrori di battitura
La prima cosa da fare è sanitizzare tutto ciò che passa con $_GET, $_POST, $_COOKIE e $_SESSION.
Ci sono delle funzioni apposite in php, come addslashes() o in maniera più mirata mysql_escape_string().
Un'altra buona abitudine è quella di tipizzare i dati, ad esempio se ti aspetti che un ID sia un numero maggiore di zero, puoi controllare in questo modo la sua conformità:
$_GET['id']=(int)$_GET['id']; // forzo la variabile ad essere esclusivamente un numero
if($_GET['id']>0){
// OK
}
Se $_GET['id'] fosse stato una stringa alfanumerica sarebbe stata convertita automaticamente in 0 (zero).
no... $_SESSION non serve.... contiene dati che risiedono sempre lato server
altra cosa molto importante se ad esempio hai register_globals attivo: inizializzare sempre le variabili
se vuoi evitare di elaborare dati da form esterni (è una cosa a cui non avevo mai pensato sinceramente ) basta controllare il referer
oppure una soluzione un po' più elaborata: l'inserimento di un campo nascosto all'interno del form con un contento generato ogni volta per ogni sessione (verrebbe generato non appena un utente visualizza una pagina del tuo sito, ad esempio il form stesso) garantendo cosi che i dati arrivino dal tuo form (confrontando il contenuto del campo nascosto con quello memorizzato in una variabile di sessione)