Newsgroup: it.comp.www.asp
Titolo: Controllare gli accessi degli abbonati

Ciao a tutti.
Molto velocemente:
ho un sito che offre servizi per utenti abbonati.
L'utente abbonato viene riconosciuto dal sistema attraverso login e
password.
Siccome il servizio č a pagamento vorrei sapere come fare per controllare se
una username/password viene utilizzata da piů di un utente.
In sostanza vorrei evitare che alcuni utenti si accordino per utilizzare la
medesima login/password, pagando come se si trattasse di un utente singolo.
Vi ringrazio per la collaborazione.
Un saluto
Filippo

Bisogna vedere come tieni traccia degli utenti online. Se usi una tabella
temporanea, non c'è problema, altrimenti... dipende dal sistema che usi
attualmente.
--
:: Fate i bravi e non clonate le pecore!
:: Distractly yours... 
man...@ufologia.net

 attualmente.
questo per individuare piů accessi contemporanei dello stesso utente, ma 
credo che lui volesse dire controllare che fisicamente sia la stessa 
persona a fare il login, cioč non passi i dati ad amici, io mi collego 
alle 8 tu alle 9
E la vedo dura.

:) No, avevo capito... appunto dipende dal sistema che utilizza ora per
tenere traccia degli accessi.
Esempio. Se utilizza una tabella temporanea a questo scopo, la soluzione è
abbastanza semplice, perchè se viene individuato l'utente che fa il login,
come già presente nella tabella temporanea, si scollega il primo (per forza
di cose, dato che per via delle sessioni non sarebbe possibili stabilire se
realmente è un altro utente o solo un "fantasma" dell'utente reale)
Se invece per tenere traccia degli utenti utilizza variabili di sessione,
allora credo (non ho mai affrontato il problema in questo caso) che l'unica
soluzione "scalabile" (una non scalabile potrebbe essere di memorizzare in
una variabile di applicazione, non tanto il numero degli utenti
contemporanei, quanto gli ID degli utenti contemporanei) sia comunque quelal
di appoggiarsi ad un DB e ad una tabella temporanea.
--
:: Fate i bravi e non clonate le pecore!
:: Distractly yours... 
man...@audiopro.it

 di un utente singolo.
Diciamo che la prima cosa e' controllare se ci sono logon contemporanei:
se sul tuo DB tieni traccia degli accessi (data/ora ed IP di logon e
data/ora di logoff) controlli se lo stesso utente si connette
contemporaneamente da un IP diverso. Questo pero' potrebbe risultare
insufficiente se si accordano per non collegarsi mai contemporaneamente.
Quindi devi cercare di "riconoscere" l'utente e l'unica soluzione
pratica che non implichi alcun software lato client sarebbe imporre di
cambiare password ad ogni sessione e' improponibile. Quindi l'unica
soluzione che mi viene in mente e' "costringere" l'utente a collegarsi
sempre con lo stesso browser dalla stessa postazione. In pratica quando
l'utente X fa il logon per la prima volta, tu gli "spari" un cookie (una
stringona casuale che pero' leghi al tipo di browser -non alla sua
versione pero'-) senza scadenza, e lo registri nel tuo DB associato
all'utente: da quel momento in poi ogni volta che l'utente X entra DEVE
avere il cookie.
Controindicazioni:
- se l'utente cancella i cookie devi prevedere una procedura per
consentirgli di ripristinarlo. E non deve poterla utilizzare troppe
volte (imponi tu che in automatico possa usarla 1 o 2 volte al mese ad
esempio, poi deve chiedere a te di sbloccargli l'account)
- se l'utente cambia browser o cambia postazione non puo' accedere, se
non facendogli fare la procedura del punto precedente.
E' accettabile per te? Per ora altro non mi viene in mente.
Altre idee?
--
Ciao!
   Alex Palmese
---
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/

 E la vedo dura.
Tutto vero.
Il problema è proprio questo.
Si, ma se gli utenti si connettono in ore diverse della giornata?
Il controllo solo sull'indirizzo IP non sarebbe sufficiente. A connessioni
diverse il provider assegna IP diversi.
Avevo pensato a una cosa del genere:
ad ogni accesso al sito scrivo in un log questi dati:
- User Agent del client (browser e sistema operativo utilizzato)
- ricavo l'host name del provider facendo un reverse dns sull'indirizzo IP
(così anche se si connette con un dial-up, ogni indirizzo IP sarà sempre
associato ad un unico provider, almeno spero)
- data e ora della connessione.
l'ideale probabilmente sarebbe di loggare l'attività di ogni singolo utente,
non solo gli accessi. In questo modo potrei verificare veramente se due
utenti accedono contemporaneamente con lo stesso username. Ma questo
genererebbe un log file un po' troppo grosso.
Sinceramente però credo che questi non siano gli unici metodi.
Secondo voi?
Grazie.
Filippo

> di appoggiarsi ad un DB e ad una tabella temporanea.
Interessante, mi daresti un paio di spunti su cui lavorare?
Grazie.
Filippo


Ciao,
imho i cookies sono sempre un problema quando si tratta di affidabilità.
Poi, se l'utente decide di collegarsi dall'ufficio e da casa (cosa lecita),
dici di fargli fare la procedura per ripristinare il cookie.
Però nulla vieta a un secondo utente di utilizzare la mesedima procedura per
attivare il cookie sul suo PC.
Credo che l'unica strada percorribile e che garantisce una buona
affidabilità sia quella di tenere traccia degli accessi al sito degli utenti
registrati, loggare la loro attività e controllare eventuali sovrapposizioni
di utenti con IP diversi.
Tenterò qualcosa.
Grazie per i suggerimenti.
Filippo

 di utenti con IP diversi.
La cosa è fondamentalmente inutile:  se l'utente si connette mediante un
provider che gli fa usare un proxy per forza (ad esempio le utenze aziendali
normalmente sono fatte così, hanno un accesso internet e sopra ci mettono
proxy e firewall in modo da veicolare centinaia di indirizzi interni su un
solo esterno, ma mi dicono che anche Fasteb o Achanto nei loro contratti "da
condominio" lavorano nello stesso modo) avrai tutti gli accessi da quella
stessa azienda sempre e solo con un solo IP, quindi potenzialmente N utenze
con lo stesso userid e lo stesso IP e non hai assolutamente modo di
distinguerle.
Secondo me (ma bada, SECONDO ME) stai cercando di fare una cosa
fondamentalmente impossibile per come sono strutturati internet, il
protocollo http ed html, la cosa va risolta ad un altro livello (contratto).
Se invece di far pagare "ad utente" fai pagare "ad utilizzo" vedrai che la
gente smette di dare in giro il proprio utente e la propria password...
Qualunque altra alternativa che mi viene in mente comporta installare
qualcosa sul client, non so se i vari produttori di chiavette abbiano
qualcosa che vada anche dentro un browser (controllo ActiveX o Java).
Saluti
Massimo


Si, ho lavorato per una società che produce chiavi usb per il riconoscimento
utente anche in internet. Perciò la cosa è fattibile. Il problema è che i
costi per chiave aumenterebbe dell'80% il costo totale dell'abbonamento.
Oggi un utente paga 30 euro all'anno per leggere gli articoli della webzine
e so che all'epoca una chiave costava 50.000 lire.
A questo punto non vale la pena.
Tenterò la strada degli indirizzi IP, tenendo in forte considerazione anche
i tuoi suggerimenti.
Grazie.
Filippo

Come dice masssimo, controlalre che utenti diversi in ore diverse usino la
stessa password è impossibile, a meno di accorid precisi con gli utenti.
INfatti lo stesso utente potrebbe uscire con IP diversi in orari diversi.
Ugualemnte utenti diversi potrebbero uscire con lo stesso IP.
Io direi di risolvere il problema di accessi contemporanei con lo stesso
identificativo.
Come dicevo all'inizio, una è la soluzione "classica" con la tabella
temporanea. L'altra a cui stavo pensando (am non l'ho mai sperimentata) è
questa (non mi hai detto quale sistema usi attualmente per tenere traccia
degli utenti... diciamo le sessioni sul server)
Vediamo...
All'inizio di ogni pagina fai questa verifica
<%
If Instr("_" & Session("UTENTE_ID") & "_",Application("UTENTI_ATTIVI")) <> 0
Then
    If  Instr("_" & Session("UTENTE_ID") & "_" & Session.ID &
"_",Application("UTENTI_ATTIVI")) = 0 Then
         ' L'utente è sempre lui, può continuare a visualizzare la pagina
    Else
        ' Utente che non ha fatto il login rinviare a pagina login
    End If
End If
%>
Qunado viene effettuato il login invece, recuperi nel DB l'ID dell'utente
che sta facendo il login e controlli:
<%
' #### Verificare Nome e password nel DB nella tabella degli UTENTI e
recuperare un record contenente l'ID univoco dell'utente in
rsTemp("UTENTE_ID")
' Se l'utente è stato identificato con successo, prosegui, altrimenti ripeti
il login
If Instr("_" & Session("UTENTE_ID") & "_",Application("UTENTI_ATTIVI")) <> 0
Then
    ' C'è già un altro utente loggato con lo stesso ID, eliminarlo dalla
lista
    While Instr("_" & Cstr(Session("UTENTE_ID")) &
"_",Application("UTENTI_ATTIVI")) <> 0
        intCont = 0
        intCont2 = 0
        intCont = Instr("_" & Cstr(Session("UTENTE_ID")) &
"_",Application("UTENTI_ATTIVI"))
        intCont2 = Instr("_",
Right(Application("UTENTI_ATTIVI"),Len(Application("UTENTI_ATTIVI") -
intCont + Len(Cstr(Session("UTENTE_ID"))) + 2)
        Application.Lock
        Application("UTENTI_ATTIVI") =
Left(Application("UTENTI_ATTIVI"),intCont-1) &
Right(Application("UTENTI_ATTIVI"), Len(Application("UTENTI_ATTIVI")) -
intCont2)
        Application.Unlock
    Wend
Else
    ' Non c'è nessun'altro loggato con i nostri identificativi,
aggiungiamoci alla lista
    Application.Lock
    If Application("UTENTI_ATTIVI") & "" = "" Then
Application("UTENTI_ATTIVI") = "_"
    Application("UTENTI_ATTIVI") = Application("UTENTI_ATTIVI") &
Cstr(rsTemp("UTENTE_ID")) & "_" & Session.SessionID & "_"
    IF Application("UTENTI_ATTIVI") & "" = "" Then
Application("UTENTI_ATTIVI") = "_"
    Application.Unlock
%>
Guarda non l'ho provata, l'ho scritta ora di getto. Però credo che in linea
di principio dovrebbe andare, sicuramente c'è da sistemare qualche errore di
sintassi e forse qualcosa nelle operazioni sulle stringhe per andare a
cancellare dalla lista l'ID+SESSIONE dell'utente già loggato con lo stesso
ID.
In pratica nella variabile Application("UTENTI_ATTIVI"), avrai qualcosa del
tipo:
_1_1283798123_466_128946128469_ ecc.
Che rappresenta la coppia:
_UTENTEID_SESSIONID_UTENTEID_SESSIONID_
Da sperimentare... :) Fammi sapere!
--
:: Fate i bravi e non clonate le pecore!
:: Distractly yours... 
man...@ufologia.net

 medesima login/password, pagando come se si trattasse di un utente singolo.
Sparo: e se, oltre alle cose già suggerite, li obblighi a cambiare la 
password (o glie la cambi tu in randomize) ogni volta? Così, se più 
utenti usano le chiavi, si rincoglioniscono a passarsele ogni volta...