PDA

View Full Version : [database,php,html] dubbi sicurezza


gaglioppo
12-11-2004, 11:56
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

Blackat
12-11-2004, 12:14
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.

gaglioppo
12-11-2004, 12:27
Originariamente inviato da Blackat
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.

..ma dalla pagina precedente si potrebbe vedere.



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.

avevo già usato questo trucchetto, ma il problema che talvolta non posso effettuare un controllo, nei casi in cui si accettano var numeriche non regolari (tipo compresi in un range, maggiori di o simili)



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.

ecco, qua non ti seguo, di che controllo si tratta?

Per quanto riguarda le sessioni non mi sai dire come funzionano?

Grazie tantissime!

VICIUS
12-11-2004, 12:34
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 ;)

gaglioppo
12-11-2004, 14:21
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

SteR9
12-11-2004, 14:37
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...

cionci
12-11-2004, 15:22
Originariamente inviato da SteR9
il metodo post non è comunque sicuro perchè non ci vuole niente a scoprire le variabili che vengono passate con i relativi valori...
:mano:

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...

gaglioppo
12-11-2004, 15:42
Originariamente inviato da cionci
:mano:

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...

Grazie cionci,

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

cionci
12-11-2004, 15:59
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...