PDA

View Full Version : Sicurezza AJAX


MEMon
06-05-2007, 17:58
Ho un dubbio, siccome con ajax si può controllare un database, e siccome il codice per farlo non è altro che banalissimo javascript, se decidessi di dare la possibilita ad un "super utente" di cancellare e modificare i dati in un database tramite AJAX avrei sicurezza pari a zero vero?

Quello che voglio dire è che studiando il codice javascript che fa la chiamata AJAX si potrebbe capire come funziona lo script(ad esempio php) al quale si appoggia, e quindi poterne fare quello che si vuole, o sbaglio?

Sono confuso...:confused:

cionci
06-05-2007, 20:52
Con php puoi generare uno script AJAX diverso a seconda dell'utente autenticato. In questo modo solo un utente con i permessi avrà in locale lo script adatto. Ci possono essere ancora problemi di sicurezza (ad esempio lo script rimane nella cache del browser), ma se progetti bene le parti che dialogano puoi gestire tutto quello che riguarda la sicurezza a livello di server (ad esempio sfruttando nuovamente la sessine php per acconsentire determinate operazioni richieste dallo script javascript)...

prodigy
06-05-2007, 21:50
puoi avere problemi di sicurezza nella parte javascript poichè può essere manomessa e quindi è consigliabile, come diceva appunto cionci, non demandare alla parte in javascript controlli "delicati". Se proprio vuoi/devi farlo assicurati che lato php ci sia un doppio controllo di tutto quello che viene passato via javascript. In questo modo, tramite php, puoi fare tutto quello che vuoi come lo faresti normalmente senza problemi di sicurezza.

MEMon
07-05-2007, 11:46
Ok grazie ragazzi

MEMon
10-05-2007, 20:47
Scusate se riuppo, ho fatto il mio bel scriptino e ne sono abbastanza soddisfatto.

Volevo sapere, nello script faccio il controllo del referrer e dello stato di un cookie, secondo voi è sufficiente per evitare che lo script sia utilizzato "dall'esterno"?

whiles_
10-05-2007, 20:57
Scusate se riuppo, ho fatto il mio bel scriptino e ne sono abbastanza soddisfatto.

Volevo sapere, nello script faccio il controllo del referrer e dello stato di un cookie, secondo voi è sufficiente per evitare che lo script sia utilizzato "dall'esterno"?

Lo script non può effettuare chiamate all'esterno, quindi il problema non si pone :O Comunque è il massimo controllo che puoi fare, questo sì. I controlli di sicurezza lato server devono essere i più curati, e non avrai alcun problema. Comunque la connessione al database deve avvenire lato server, quindi non vedo dove sia il problema :confused: O no?

MEMon
10-05-2007, 20:59
Ti devo smentire purtroppo, le chiamate si fanno anche dall'esterno.
Comunque se mi dice che è il massimo che si può fare sto tranquillo dai.

ps.se diffidi metti su uno scriptino php che te lo chiamo :D heheh

whiles_
10-05-2007, 21:03
Ti devo smentire purtroppo, le chiamate si fanno anche dall'esterno.
Comunque se mi dice che è il massimo che si può fare sto tranquillo dai.

ps.se diffidi metti su uno scriptino php che te lo chiamo :D heheh
Sei sicuro? :eek: Ma parli di una pagina html o su un'estensione?

MEMon
10-05-2007, 21:05
Bhe il modo non è importante o no?
Cioè il fatto è che si può, questo è il problema... :(

whiles_
10-05-2007, 21:18
Bhe il modo non è importante o no?
Cioè il fatto è che si può, questo è il problema... :(
No è molto diverso, in locale uno può fare quello che vuole, con javascript o meno. Mentre in rete, in un servizio che utilizzano tutti gli altri utenti, il rischio di phishing perfetto utilizzando questo metodo è molto elevato.

Comunque il problema non sussiste, è allo script php il compito di verificare se l'utente ha il permesso di cancellare quella determinata tabella e autorizzare o no l'operazione, non al javascript :D Non ha nulla di differente dal metodo normale senza ajax, è esattamente uguale. E non c'è mica solo javascript che ti fa eseguire uno script php, ma qualunque linguaggio di programmazione.

MEMon
10-05-2007, 21:23
No è molto diverso, in locale uno può fare quello che vuole, con javascript o meno. Mentre in rete, in un servizio che utilizzano tutti gli altri utenti, il rischio di phishing perfetto utilizzando questo metodo è molto elevato.
Bhe si ma se utilizzo uno script che si trova online ci faccio poi quel che mi pare, se lo script comanda direttamente un database posso comandare il database...


Comunque il problema non sussiste, è allo script php il compito di verificare se l'utente ha il permesso di cancellare quella determinata tabella e autorizzare o no l'operazione, non al javascript :D Non ha nulla di differente dal metodo normale senza ajax, è esattamente uguale. E non c'è mica solo javascript che ti fa eseguire uno script php, ma qualunque linguaggio di programmazione.
Bhe si era appunto quello che chiedevo...appurato il fatto che uno script php si può chiamare con javascript anche dall'esterno, volevo appunto sapere se già così stavo abbastanza sicuro.

whiles_
10-05-2007, 21:27
Bhe si era appunto quello che chiedevo...appurato il fatto che uno script php si può chiamare con javascript anche dall'esterno, volevo appunto sapere se già così stavo abbastanza sicuro.
il tuo script amministra direttamente il database, senza un controllo lato server? Se fosse così non ci vuole comunque niente a falsificare il referrer ed il cookie di controllo, e fottere tutto... Il controllo lato server è fondamentale...

MEMon
10-05-2007, 21:29
Si amministra il database... azz come possono fare a falsificare il referrer?

E quindi che altri controlli devo fare? Inserisco le sessioni?

MEMon
10-05-2007, 21:31
il tuo script amministra direttamente il database, senza un controllo lato server? Se fosse così non ci vuole comunque niente a falsificare il referrer ed il cookie di controllo, e fottere tutto... Il controllo lato server è fondamentale...
Scusami ma x controllo lato server che intendi precisamente?

whiles_
10-05-2007, 21:37
Scusami ma x controllo lato server che intendi precisamente?

Che cosa devi fare precisamente? Non va bene un semplice controllo username + password, magari solo per le operazioni che richiedono più "diritti"?

Si può falsificare il referrer semplicemente utilizzando un qualunque linguaggio di programmazione e richiamando lo script php utilizzando gli header opportunamente falsificati... è una cosetta da niente, semplicissimo.

MEMon
10-05-2007, 21:40
Ti spiego, il sito è accessibile dopo che si è loggati, una volta loggato viene settato un cookie che lo uso un po' per tutto...
lo uso anche per validare lo script che controlla il database, il quale viene utilizzato tramite ajax.

Quindi, una volta loggati, come faccio a ricontrollare sempre se username e password van bene? Uso le sessioni?
Ma sono sicure?

whiles_
10-05-2007, 21:47
Ti spiego, il sito è accessibile dopo che si è loggati, una volta loggato viene settato un cookie che lo uso un po' per tutto...
lo uso anche per validare lo script che controlla il database, il quale viene utilizzato tramite ajax.

Quindi, una volta loggati, come faccio a ricontrollare sempre se username e password van bene? Uso le sessioni?
Ma sono sicure?
E' assolutamente insicuro, il cookie si può falsificare... Le sessioni invece sono sicure, perchè le variabili non vengono salvate nei cookie ma localmente. Ti conviene avviare la sessione anzichè usare il cookie, e poi controllare se la sessione è aperta per concedere o no l'esecuzione dello script. In alternativa, se vuoi usare privilegi differenti, quando si logga l'admin, avvia la sessione e setta $_SESSION['admin']=true.
Così se deve eliminare un database lo script controlla che $_SESSION['admin']=true, mentre se deve inserire un semplice record controlla semplicemente che la sessione sia aperta.

MEMon
10-05-2007, 21:49
Ok farò così ti ringrazio.
Però questo comporta ovviamente la necessità di riloggarsi se chiudo il browser vero?

whiles_
10-05-2007, 21:54
Ok farò così ti ringrazio.
Però questo comporta ovviamente la necessità di riloggarsi se chiudo il browser vero?
No, il cookie di riferimento alla sessione rimane anche quando il browser viene chiuso e riaperto. La sessione scade automaticamente dopo non mi ricordo quante ore, ma è comunque un intervallo di tempo che si può modificare da php.ini :D Le sessioni sono sempre le cose migliori da usare quando si parla di sicurezza

MEMon
10-05-2007, 22:00
Sapevo che le sessioni duravano solo per il tempo in cui il browser era aperto, una volta chiuso, sessione scaduta.

Comunque mi informo meglio e ho capito che devo puntare sulle sessioni, ti ringrazio intanto!

whiles_
10-05-2007, 22:06
Sapevo che le sessioni duravano solo per il tempo in cui il browser era aperto, una volta chiuso, sessione scaduta.

Comunque mi informo meglio e ho capito che devo puntare sulle sessioni, ti ringrazio intanto!
Di niente, prova a guardare qua http://php.html.it/guide/lezione/2994/breve-introduzione-alle-sessioni-php/ :D

cionci
11-05-2007, 01:16
No, il cookie di riferimento alla sessione rimane anche quando il browser viene chiuso e riaperto. La sessione scade automaticamente dopo non mi ricordo quante ore, ma è comunque un intervallo di tempo che si può modificare da php.ini :D Le sessioni sono sempre le cose migliori da usare quando si parla di sicurezza
Che io sappia quando si chiude il browser si perde il cookie della sessione...ciò non toglie che se si propaga il sessioneid tramite GET si può chiudere il browser e riaprire lo stesso link (comprendente il sessionid) e la sessione si mantiene. In pratica chiudendo il browser si perde il sessionid contenuto nel cookie, ma la sessione in teoria esiste sempre sul server...
Di default la sessione sul server scade dopo 15 minuti di inattività...

whiles_
11-05-2007, 12:54
Che io sappia quando si chiude il browser si perde il cookie della sessione...ciò non toglie che se si propaga il sessioneid tramite GET si può chiudere il browser e riaprire lo stesso link (comprendente il sessionid) e la sessione si mantiene. In pratica chiudendo il browser si perde il sessionid contenuto nel cookie, ma la sessione in teoria esiste sempre sul server...
Di default la sessione sul server scade dopo 15 minuti di inattività...
be', il session id viene impostato come un qualunque cookie, quindi dopo che il browser è stato chiuso e riaperto rimane. Se invece il browser è stato impostato in modo da eliminare i cookie alla sua chiusura, allora si cancella.