|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
[PHP] sicurezza form, sessioni, referer
ciao a tutti
![]() per un esame sto approfondendo php. mi interessa particolarmente la sicurezza dei form e l'integrità dei databse, quindi vi chiedo: 1) le sessioni sono sicure?ho visto che firefox ad esempio memorizza l'id di sessione in un cookie, ma in teoria le sessioni sono file di testo lato server, giusto?quindi nessun problema con browser vecchi o che non accettano cookie?risultano quindi sicure al 100% per memorizzare dati importanti? 2) $_SERVER['HTTP_REFERER']: lo uso per controllare che il form da cui provengono i dati "risiede" nel mio sito...ma ho letto che è possibile imbrogliare, se si come?con che difficoltà? qualche trucchetto per aumentare la sicurezza dei form o basta il referer e le sessioni? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
ok, il referer può essere facilmente spoofato...come tutelarsi? qualche idea su su che io sono alle prime armi
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 490
|
al posto del referer io userei tranquillamente le sessioni ...ne imposti una nelle pagine che ti servono e poi controlli la sessione quando apri un'altra pagina !...oppure memorizzi nella sessione il path dello script e controlli sia uguale
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
qualche altra idea??su questo forum non erano tutti "programmatori"? ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Se un browser non supporta i cookie, l'id viene progagato automaticamente dal server nelle richieste GET... 2) Anche il REFERER è una informazione in chiaro che passa nella richiesta HTTP e viene generato dal browser...con una richiesta ad hoc scritta "a mano" (non necessariamente, ma acnhe tramite un programma) si può tranquillamente imbrogliare. Puoi controllare l'ip e salvarlo nella sessione... Questo ti può servire... Esiste anche lo spoofing (ovvero imbrogliare sulla sorgente dei pacchetti con pacchetti IP fatti ad hoc), ma in ogni caso, a meno che chi fa lo spoofing "stia nel mezzo" fra client e server e faccia uno sniffing dei pacchetti di ritorno, è una comunicazione solo verso il server... Il problema dello spoofing si può quindi aggirare con sistemi di controllo post autenticazione... Facendo l'esempio di un e-commerce prima della conferma d'ordine basterebbe chiedere un codice alfanumerico sempre diverso visualizzato all'interno di una immagine (un po' come fanno in molti forum, lo puoi realizzare con le librerie gd)... Questo evita anche problemi relativi a bot, a meno che non abbiano un sistema di analisi delle immagini per ricavarne il testo...in tal caso basta rendere l'immagine più confusa (con linee orizzonatali, verticali e oblique casuali o con font casuali)... Un sistema del genere può essere molto valido sotto tanti punti di vista, ma non per la sicurezza dei contenuti (esiste sempre lo sniffing)...per quello si è obbligati ad usare un canale criptato, che risolve anche molti dei precedenti problemi, ma ne apre altri...come ad esempio quelli relativi alle certification authority ed alla distribuzione delle chiavi... Dieffie-Hellman rulez Come puoi vedere non è una cosa così semplice ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() E te sei un programmatore ? Allora perchè non sai queste cose (che tra l'altro non riguardano la programmazione)... |
|
![]() |
![]() |
![]() |
#7 | |||
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
![]() la mia intezione era discutere seriamente la questione. SESSIONI: sarò io che ho progettato male la struttura delle pagine ma, in breve: pagina input.php con form (action se stessa). 1)quando l'utente invia il form, la pagina lo valida 2)se è valido setta $_SESSION['form_valido']=TRUE; 3)mostra un nuovo piccolo form di conferma ("processa.php") 4)ovviamente i dati sono questa volta input nascosti pagina processa.php Codice:
if(isset($_POST['conferma']) && isset($_SESSION['form_valido'])) { //inserisci nel db, i dati sono validi } 1)inserire input corretti nel primo form (senza confermarne l'invio alla pagina processa.php) 2)salvare la pagina, cambiare gli input nascosti in input questa volta non validi 3)inviare il form così modificato. per opera infatti, 2 tab rappresentano la stessa sessione. quindi, la pagina salvata su hd con input non validi sarà accettata ugualmente, perchè il punto 1 ha fatto scrivere nella sessione il valore 'form_valido' = TRUE che ne pensi? Quote:
Quote:
|
|||
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
![]() possibile che non si siano mai affrontati questi temi, e che a nessuno importi? |
|
![]() |
![]() |
![]() |
#9 | |||
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Ad esempio: In ogni pagina di risposta ad una form metti: Codice PHP:
Quote:
Quote:
Il testo (estratto casualmente) visualizzato nell'immagine devi salvarlo nella sessione al momento della visualizzazione dell'immagine... Tramite una form l'utente nella stessa pagina dovrà inserire il codice che vede scritto nell'immagine per confermare l'operazione... Ovviamente tu verificherai il testo inserito confrontando con quello salvato nella sessione, se l'esito è positivo effettui la scrittura nel DB... Comunque attento questo sistema abbassa l'usabilità del sito, quindi mettila soltanto nei punti critici (ad esempio per la conferma di un ordine e non per l'inserimenti di un prodotto nel carrello)... Riguardo al controllo dell'ip...ti emtte tutto a disposizione PHP... Invece che $_SERVER["REFERER"] puoi controllare $_SERVER["REMOTE_ADDR"] (se mi ricordo bene), che è l'indirizzo IP del client... Puoi anche controllarli entrambi... Se proprio vuoi amssimizzare la sicurezza... Riguardo alla connessione criptata...dipende tutto dal server web che deve prevederla... In tal caso non ci sono problemi...dal tuo punto di vista non cambia niente... |
|||
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Anche questo ti dovrebbe interessare: http://freephp.html.it/articoli/view...olo.asp?id=123
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
![]() la tua soluzione è interessante (e funziona senz'altro), ma ho trovato un interessante articolo (che ti invito a leggere....) http://www.advosys.ca/papers/form-tampering.html in breve questo tipo suggerisce di: 1) calcolare il digest nei campi nascosti in input 2) inserire tale digest a sua volta come input nascosto 3) nella pagina che processa il form, calcolare nuovamente il digest dei campi nascosti e verificare che esso coincida con il digest inserito come input nascosto nel form. in questo modo siamo sicuri che il form è stato prodotto da noi,senza possibilità alcuna che altri l'abbiano modificato mi sembra una soluzione elegante e neanche tanto complicata. ora devo solo scegliere ![]() |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E se si scrive una richiesta ad hoc con i campi modificati ed il digest modificato in base ai nuovi campi ????
![]() |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
![]() e se usi un sha512 mi sembra un pò difficile trovare la chiave ![]() |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
Quote:
se gli hacker leggono la chiave pazienza... ![]() sarebbe cmq interessante vedere quale dei due metodi offre maggiore sicurezza, sessione o digest cmq inserisco qui il codice necessario per sperimentare questa tecnica Codice PHP:
__________________
Desktop: Intel i7-4770K | Asus Gryphon Z87 | Crucial 16GB DDR3 1600MHz | Gigabyte GTX 780 OC Windforce x3 | Samsung 840 Pro 128GB (x 2 RAID0) | be quiet! Straight Power E9 680W CM Mercatino: bottoni, Dede371, pippokennedy, Bulbi_67, randose, DarkSiDE, davidepaco, _Legend_ Ultima modifica di Gremo : 05-09-2005 alle 17:57. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:33.