Pages: [1]   Go Down
Print
Author Topic: Evitare Abusi script PHP  (Read 4242 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Michel
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 370


Michel Murabito


« on: 17-02-2012, 09:07:51 »

Salve ragazzi, ho una domanda spinosa a cui non sto trovando una risposta efficiente.

Ho una pagina html/js che deve in qualche modo comunicare ad un db che il tempo di permanenza sulla pagina dell'utente è stato "x".

Ora siccome gli utenti potrebbero chiudere senza fare alcun tipo di operazione (ad esempio cliccare su un bottone che poi salva il dato di permanenza sul db) ho pensato di usare una chiamata ajax che ogni tot tempo richiama una pagina php che salva il nuovo dato su database.

Unico problema è che devo passare almeno l'id della pagina e l'id utente con GET e questo potrebbe far sì che un utente più malizioso potrebbe fruttare la cosa per "aggiornarsi" il tempo di permanenza.

Qualche idea? Non ho alcun tipo di modo di autenticare l'utente (tramite session o cookies) nella nuova pagina, quindi in qualche modo i dati utente (id) e il dato della pagina di provenienza (altro id) devono essere passati.

Grazie a tutti per le eventuali risposte.
Un Abbraccio
Michel
Logged

Ex Rappresentante, ma per qualsiasi cosa (per me possibile fare) contattatemi all'email michelmurabito{[at]}gmail{[dot]}com
Faccio l'impossibile... Per i miracoli mi sto attrezzando!


Mitto tibi navem prora puppique carentem
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 17-02-2012, 15:22:20 »

Vediamo se ho capito le tue intenzioni. Non te lo chiedo per curiosità, ma per facilitare il compito.
Quello che tu chiami "permanenza" nel sito va inteso come "pagina aperta tot. tempo in modo che (ad esempio) vengano <<visti>> certi banner pubblicitari?
In che modo l'utente malizioso potrebbe sfruttare l'ID secondo te per falsificare la sua presenza sul sito (dillo solo dopo che hai risposto alla prima domanda in cui definisci cosa intendi per "permanenza", però)?

Ti faccio, inoltre, notare che i cookie non aiutano in alcun modo in questo campo, quindi averli avuti a disposizione non avrebbe migliorato in alcun modo la potenza di controllo sulla permanenza (anzi, sarebbero/sono stati degli ulteriori aspetti da considerare per evitare la maliziosità).

Rispondi, grazie .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
salvin
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 259



« Reply #2 on: 17-02-2012, 16:28:43 »

La sessione serve.
Quella pagina deve mandare ogni minuto l'id di sessione dell'utente loggato(preso sempre con ajax) e il timestamp, il server confronta il timestamp ricevuto  e memorizza la differenza in un'altra variabile di sessione, se ad un certo punto la differenza calcolata si discosta per oltre un certo valore da quella memorizzata il conteggio viene invalidato per quella sessione, o viene considerato il MAX, in base a quello che ti serve.
Non può funzionare in questo modo?
Logged
Michel
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 370


Michel Murabito


« Reply #3 on: 17-02-2012, 16:34:52 »

Tempo di permanenza: tempo che l'utente sta a guardare la pagina.

se ho una pagina che ogni tot secondi invia in ajax tramite get ad un altra pagina dei parametri lui potrebbe copiare nella barra le info e usarle.

Per esempio se la pagina prende con get id l'utente potrebbe scrivere pagina.php?id=xxx (e quindi incrementare il suo tempo sul server).

(Non è per sapere di pubblicità o simili, mi servirebbe solo calcolare il tempo di permanenza degli utenti sul sito (con un metodo di cui posso verificare il sorgente) questo perché vorrei confrontarlo con quello emerso da google analytics.

Non posso usare le sessioni, avete altre soluzioni sicure? Smiley

Grazie a Tutti
Logged

Ex Rappresentante, ma per qualsiasi cosa (per me possibile fare) contattatemi all'email michelmurabito{[at]}gmail{[dot]}com
Faccio l'impossibile... Per i miracoli mi sto attrezzando!


Mitto tibi navem prora puppique carentem
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #4 on: 17-02-2012, 16:47:57 »

(Non è per sapere di pubblicità o simili, mi servirebbe solo calcolare il tempo di permanenza degli utenti sul sito (con un metodo di cui posso verificare il sorgente) questo perché vorrei confrontarlo con quello emerso da google analytics.

Non posso usare le sessioni, avete altre soluzioni sicure? Smiley
Sì, visto che hai esposto meglio il problema, esplicitando ulteriori dati molto importanti, la soluzione sicura è reverse-engineerizzare il codice javascript che proviene da google-analytics e che viene eseguito nella pagina quando viene caricata così capisci come fa google-analytics a conteggiare tale tempo.
Così, invece di fare un confronto tra risultati, farai un confronto tra come li calcoli questi risultati (il tuo metodo, non ancora trovato, e quello usa google-analytics.

Di Google ci si può fidare: se non del loro conteggio (che magari è stato manipolato dopo essere stato calcolato), almeno da come è stato calcolato .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
salvin
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 259



« Reply #5 on: 17-02-2012, 18:00:46 »

Tempo di permanenza: tempo che l'utente sta a guardare la pagina.

se ho una pagina che ogni tot secondi invia in ajax tramite get ad un altra pagina dei parametri lui potrebbe copiare nella barra le info e usarle.

Per esempio se la pagina prende con get id l'utente potrebbe scrivere pagina.php?id=xxx (e quindi incrementare il suo tempo sul server).

(Non è per sapere di pubblicità o simili, mi servirebbe solo calcolare il tempo di permanenza degli utenti sul sito (con un metodo di cui posso verificare il sorgente) questo perché vorrei confrontarlo con quello emerso da google analytics.

Non posso usare le sessioni, avete altre soluzioni sicure? Smiley

Grazie a Tutti

Forse non mi sono spiegato bene, il problema non è GET(potresti anche usare POST con ajax), ma che senza usare variabili di sessione quel server aggiorna senza sapere chi sono veramente, quindi potrei fare una mia paginetta che aggiorna tutti i tempi degli utenti che voglio io, quindi no, non c'è un altro modo sicuro.
Logged
LtWorf
Forumista Esperto
****
Offline Offline

Posts: 1.079

Ogni cosa da me scritta è da intendersi come opinione personale e non come dato di fatto. Anche le eventuali dimostrazioni matematiche da me scritte saranno opinioni personali e quindi dovranno venire dimostrate da una terza parte di fiducia


WWW
« Reply #6 on: 17-02-2012, 19:39:50 »

Secondo me ha ragione salvin.

Al massimo potresti vedere con i referrer delle altre pagine, se il tab non viene chiuso, in media quanto sia la permanenza su quella specifica pagina.
Logged

There are some OO programming languages. I will create the first -_-' language.

LtWorf
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #7 on: 17-02-2012, 20:49:59 »

Quasi certamente state confondendo "sessione" intesa come variabile PHP e sessione in senso più generale come uso continuativo di una certa pagina nello stesso browser in uso normale.

Anche se non fossero disponibili le variabili di sessione PHP, è possibile comunque gestire sessioni tramite un archivio di "usi": si usa un input type="hidden" di un form html che viene passato di volta in volta quando la pagina viene "aggiornata" tramite JavaScript.
La prima volta che una pagina viene aperta, tale variabile non sarà passata, se però viene passata essa conterrà un hash particolare calcolato da una procedura PHP più o meno random e che si associa biunivocamente a quello che intendiamo con sessione in senso generale. Questi hash non possono essere falsificati (in ogni caso ad ogni hash corrisponde uno ed un solo indirizzo IP, ovviamente il viceversa non può valere invece, e questa associazione è completamente "opaca" al client).
Alla fine questi hash sono associati internamente al server anche a un time stamp temporale, che viene aggiornato ogni qual volta questa variabile viene passata dal client al server, e che si usa per capire quando fare "scadere" la sessione, temporalmente parlando.

Questo è più o meno quello che fa PHP per gestire le sessioni (anche se normalmente questo hash particolare viene salvato in un cookie, ma siccome Michel dice che non si possono usare...), e invece potete farlo direttamente voi appunto in questo modo  ok
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
salvin
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 259



« Reply #8 on: 18-02-2012, 12:40:46 »

Sì, ok, puoi reimplementare il meccanismo delle sessioni per una singola pagina, e fin quando l'utente fa il login in quella pagina potrebbe anche andare bene, ma non mi sembrava questo il caso.
Logged
shiny
Forumista
***
Offline Offline

Posts: 810



WWW
« Reply #9 on: 18-02-2012, 13:48:31 »

Michel per fare cio' che dici te ci sono un sacco di tool seo che ti semplificano il lavoro, ma se vuoi proprio implementarlo te hai bisogno di 2 due cose:
  • devi poter tener traccia dell'identita' dell'utente (ip, sessioni, cookie, kerberos, ... e molti altri)
  • associare una funzione agl'eventi DOM onload/unload che rispettivamente registri il tempo di entrata dell'utente e quello di uscita dalla pagina
Logged
Michel
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 370


Michel Murabito


« Reply #10 on: 20-02-2012, 09:36:05 »

Reverse, scusa ma se io l'hash "calcolato" lo passo in GET? Non dovrebbe essere presumibilmente sicuro?

Mi spiego meglio, quando l'utente entra nella pagina specifica, gli faccio generare un hash che associo al suo indirizzo IP (e salvo su un DB di "sessioni"), quando devo aggiornare il tempo nella seconda pagina passo via GET l'hash e poi dall'altra parte controllo se hash e ip sono corrispondenti.

Non dovrebbe essere sicuro?

Comunque grazie a tutti per i consigli! Smiley
Logged

Ex Rappresentante, ma per qualsiasi cosa (per me possibile fare) contattatemi all'email michelmurabito{[at]}gmail{[dot]}com
Faccio l'impossibile... Per i miracoli mi sto attrezzando!


Mitto tibi navem prora puppique carentem
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #11 on: 20-02-2012, 12:46:28 »

Reverse, scusa ma se io l'hash "calcolato" lo passo in GET? Non dovrebbe essere presumibilmente sicuro? [...] Non dovrebbe essere sicuro?
Sicuro c'è ben poco, con la tecnologia attuale.
Considera che il web è nato senza stato. Per quello che esiste al momento e che ti è possibile usare, questo è il massimo che puoi fare.
Alla fine c'è il modo di imbrogliare, ed è quello di simulare l'azione del browser quando in realtà il browser è chiuso.
Cioè se la tua paura è quella che un utente smaliziato ed esperto non stia realmente in una pagina pur tuttavia gli venga contato del tempo come se lo fosse, beh, lo potrà fare, e tu non potrai accorgertene .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Michel
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 370


Michel Murabito


« Reply #12 on: 20-02-2012, 12:49:54 »

Reverse, scusa ma se io l'hash "calcolato" lo passo in GET? Non dovrebbe essere presumibilmente sicuro? [...] Non dovrebbe essere sicuro?
Sicuro c'è ben poco, con la tecnologia attuale.
Considera che il web è nato senza stato. Per quello che esiste al momento e che ti è possibile usare, questo è il massimo che puoi fare.
Alla fine c'è il modo di imbrogliare, ed è quello di simulare l'azione del browser quando in realtà il browser è chiuso.
Cioè se la tua paura è quella che un utente smaliziato ed esperto non stia realmente in una pagina pur tuttavia gli venga contato del tempo come se lo fosse, beh, lo potrà fare, e tu non potrai accorgertene .

Bhè non avevo dubbi, il discorso è che comunque volevo semplicemente un metodo per tagliare fuori i "meno smaliziati" e "complicare" leggermente le cose a quelli iù esperti... Se poi qualcuno imbroglia pazienza! Wink

Grazie Nuovamente a tutti per i suggerimenti! Smiley
Logged

Ex Rappresentante, ma per qualsiasi cosa (per me possibile fare) contattatemi all'email michelmurabito{[at]}gmail{[dot]}com
Faccio l'impossibile... Per i miracoli mi sto attrezzando!


Mitto tibi navem prora puppique carentem
hukketto
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.000



« Reply #13 on: 25-02-2012, 02:07:27 »

[...] passo via GET l'hash e poi dall'altra parte controllo se hash e ip sono corrispondenti.

Non dovrebbe essere sicuro?
[...]
Fatte salve le osservazioni di Reverse sulla provenienza della visita e riguardo possibili attacchi di replay, sarebbe comunque inaffidabile basare il tuo hash solo sull'ip, in quanto tutti i visitatori dietro un nat/proxy ti apparirebbero come un unico utente. Ad esempio due utenti del tuo sistema hanno lo stesso ip, se tu identifichi le visite che effettuano tramite un hash del loro ip, non sapresti a chi aggiornare i dati.
Un indirizzo ip non è identificativo di un utente, sopratutto se poi devi anche identificarne il ritorno.
Se ti serve solo avere dei dati legati a degli IP anonimizzati allora non serve il sistema di autenticazione (il tuo id utente di cui parlavi all'inizio).
Logged

Michel
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 370


Michel Murabito


« Reply #14 on: 30-03-2012, 14:21:47 »


Se ti serve solo avere dei dati legati a degli IP anonimizzati allora non serve il sistema di autenticazione (il tuo id utente di cui parlavi all'inizio).


NO, il problema è che voglio sapere se l'utente REGISTRATO al portale trascorra 2 ore (at esempio) davanti una determinata pagina. Ora per carità, ho chiesto qui proprio per avere consigli sulla sicurezza.

Ho risolto semplicemente passando l'id e dei caratteri particolari presi da un token (monouso) creato per la sessione e sconosciuto all'utente finale.

1) Cerco di spiegare meglio, quando l'utente entra nella pagina incriminata creo in php un token di 64 caratteri che salvo su DB insieme alla sua data di emissione.

2) Di questi 64 caratteri ne scelgo 32 casuali (in ordine) che riporto in una funzione javascript.

3) Trascorsi 5 minuti in ajax lancio una funzione ad una pagina php trasportando via GET ID e i 32 caratteri del token e l'id della pagina su cui l'utente è attualmente.

4) Nella pagina php di destinazione (da ajax) verifico che i 32caratteri siano presenti nello stesso ordine sul token salvato nel DB e che dalla creazione del token siano passati + o - 5 minuti, se si aggiungo al tempo di permanenza dell'utente sulla pagina i 5 minuti, altrimenti mi segnalo via log che l'utente ha riscontrato un errore (e lo tengo d'occhio).

5) Nel database salvo un nuovo token e il nuovo orario e ritorno in ajax altri 32 caratteri del token nuovo che sostituisco a quelli della funziona ajax per il prossimo "giro".

6) Se l'errore è frequente contatto l'utente chiedendogli spiegazioni, (potrebbero essere prove andate male di fregare il sistema)


In questo modo è molto improbabile che l'utente riesca a barare senza entrare realmente nella pagina.
Sicuramente non è sicuro al 100% ma diciamo anche che il lavoro non è per lanciare missili, quindi anche se il 10% degli utenti bara potrebbe essere comunque un buon risultato (90% di dati reali).

Grazie ancora a tutti per i consigli.
Logged

Ex Rappresentante, ma per qualsiasi cosa (per me possibile fare) contattatemi all'email michelmurabito{[at]}gmail{[dot]}com
Faccio l'impossibile... Per i miracoli mi sto attrezzando!


Mitto tibi navem prora puppique carentem
Pages: [1]   Go Up
Print
Jump to: