|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
|
[database,php,html] dubbi sicurezza
ci riprovo.
Ho un database in mysql e lo gestisco con pagine php create da me. Tutto ok, nessun problema, però... premessa: - passando le variabili da una pagina all'altra nel modo seguente: wwww.miosito.it/contatti.php?var=12&pippo=13 è chiaro che un utente malizioso potrebbe accedere alla pagina modificando il valore delle variabili, tipo cosi': wwww.miosito.it/contatti.php?var=66&pippo=76 questo potrebbe portare a delle modifiche inattese sul mio db, qualora all'inizio della pagina non facessi opportuni controlli. mi chiedo ora: come posso risolvere? - c'e' un modo per "oscurare" nella barra degli indirizzi il nome delle variabili? - anche se le "oscurassi" sarebbe semplicemente catturarle guardando l'html della pagina precedente, come comportarmi? - in particolare volevo sapere come funzionano praticamente le session, per ora la sintassi mi interessa poco, in teoria potrei risolvere molti problemi con una sola variabile di controllo. -ci sono differenze di gestione delle session e del passaggio di var da una pagina all'altra, in base al browser usato (ie,opera, mozilla) ? grazie per l'aiuto
__________________
Nunc est bibendum Ultima modifica di gaglioppo : 12-11-2004 alle 11:00. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2004
Città: Acireale
Messaggi: 447
|
Basta che nei form utilizzi il metodo post invece del metodo get,
cosi' in teoria l'utente "malizioso" non vedra' "mai" la query che passi allo script. Poi se sei costretto ad utilizzare la query string ( cioe' i parametri che passi nell'indirizzo ) puoi al massimo controllarne la validita' all'interno dello script. Ad esempio, se nella query string l'identificatore var deve essere un numero, puoi fare il controllo se si tratta effettivamente di un numero. Se poi nella query string hai degli identificatori che modificano il tuo database, al massimo puoi utilizzare la variabile del server HTTP_REFER, che contiene praticamente l'indirizzo della pagina riferita dallo script. A questo punto di basta fare il controllo se lo script e' stato riferito dal direttamente dal tuo sito oppure qualche utente smanettone sta cercando di accedere violando la sicurezza del tuo sito. Saluti. |
![]() |
![]() |
![]() |
#3 | |||
Senior Member
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
|
Quote:
Quote:
Quote:
Per quanto riguarda le sessioni non mi sai dire come funzionano? Grazie tantissime!
__________________
Nunc est bibendum |
|||
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Effettuare i controlli sui dati inseriti è una cosa da fare comunque. Come ti hanno gia detto puoi usare POST quando puoi ma non è sempre possibile. anche il controllo del referer puo essere una cosa da mettere su. In ogni caso sono due tecniche facilmente scavalcabili da chi ha un minimo di esperienza. Se vuoi andare sul sicuro, ed evitare sql-injection, cerca anche di rifiutare stringhe con tutte qui comandi SQL che possono rovinare il database.
ciao ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
|
non ci siamo ancora, l'utente deve poter modificare i dati di una tabella ma si dovrebbe attenere a quello che io gli impongo, non deve cambiare il valore delle var a suo piacimento.
-il problema non è solo "rovinare" il database, ma può essere semplicemente cambiare alcuni valori numerici. - il fatto di usare post non mi aiuta assolutamente perchè, ripeto, si potrebbe accedere alla pag precedente in html e vedere il nome delle variabili (anche di quelle nascoste di tipo hidden). -il controllo non è sempre possibile, questa è la realtà e nel mio caso il controllo non è attuabile. grazie per l'aiuto, spero di arrivare gradualmente ad una soluzione. a presto
__________________
Nunc est bibendum |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
|
ma si tratta di un'area per utenti registrati?
il metodo post non è comunque sicuro perchè non ci vuole niente a scoprire le variabili che vengono passate con i relativi valori... |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() Devi: - controllare sempre e comunque i valori passati ed il loro contenuto - controllare ogni volta se quell'utente dispone dei diritti necessari per fare l'operazione che sta cercando di fare - memorizzare nella sessione lo stato corrente dell'utente: ad esempio se si trova in una pagina in cui deve confermare una cancellazione in un database ci scrivi "PRECANC"...nell'azione successiva avvierai la cancellazione solo se trovi quel valore nella sessione (valore poi da eliminare)...e così via...per ogni azione pericolosa... |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Sep 2002
Città: Monza
Messaggi: 598
|
Quote:
quindi se creo una session di nome VERIFY e verifico sempre se vale 1 prima di toccare significamente il db potrei risolvere? e mettiamo caso che io crei una var con GET o POST e una di controllo chiamo la prima VARIABIL e la seconda VERIFY, qualcuno modificando questo link wwww.sitomio.it/contatti?VARIABIL=3 (con Verify come sessione) in wwww.sitomio.it/contatti?VARIABIL=3&Verify=1 naturalmente supponendo conosca il nome della session cosa otterrebbe? un errore? grazie ancora
__________________
Nunc est bibendum |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Questo è proprio uno dei motivi per cui hanno tolto le variabili autoglobali per post, get e sessione...
Le variaibli devi recuperarle dai rispettivi vettori $_SESSION e $_POST... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:30.