Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: DBlog: problema login

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764

    DBlog: problema login

    Tempo fa cercavo un blog in ASP e alla fine ho scelto DBlog.
    Avevo l'esigenza di installare diversi blog sullo stesso sito e con alcune modifiche sono riuscito a raggiungere lo scopo: in un sito ci sono diversi blog.

    La struttura è questa:

    Per il blog:
    miosito -> users e poi nella cartella "users" ci sono tante cartelle quanti sono i blog installati (mario, anna, ecc).

    Struttura dei db:
    mdb-database -> users e poi nella cartella "users" ci sono tante cartelle quanti sono i blog installati (mario, anna, ecc).

    Ogni db ha nome diverso: il blog di mario si chiama mario.mdb, poi c'è anna.mdb, ecc.

    In amministrazione di ciascun blog, posso entrare come admin, con tutti i privilegi. Per comodità mia, ho creato in tutti i blog un'utenza di amministrazione con stessa username e stessa password.
    Sempre in amministrazione posso entrare come utente "normale" e qui ho creato in ogni db una sola utenza (ovviamente con username e password diverse per i diversi blog).

    Riesco a loggarmi sia come amministrazione, sia come utente in tutti i blog.

    Ho, però, un problema.
    Se faccio il login come mario, nel blog di Mario (users-> mario -> blog -> admin), scopro che dopo essermi fattomi riconoscere come Mario (utente valido per il il blog mario), se provo ad entrare in users -> anna -> blog -> admin, mi riconosce come utente valido anche nel blog di Anna e ho tutti i diritti di Anna. La cosa strana è che nel db di Anna non esiste l'utenza Mario.

    Questi sono i campi della tabella "autori" che vengono presi in considerazione per il login:
    ID
    UserID
    Password
    Nick
    Admin (campo di tipo Yes/No).

    Nel DBlog, la password viene criptata con un algoritmo SHA-1.

    Questo è lo script che fa il controllo:
    codice:
    <%
    	'dBlog 2.0 CMS Open Source
    	'Versione file 2.0.0
    %>
    
    
    
    
    <%
    	Dim SQLAutori, RSAutori, FUserID, FPassword
    
    	FUserID = Request.Form("UserID")
    	FPassword = Request.Form("Password")
    
    	If FUserID <> "" AND FPassword <> "" Then
    		SQLAutori = " SELECT [Nick], [UserID], [Password], [Admin] FROM [Autori] WHERE [UserID] = '"& ControlloSQLInjection(FUserID) &"' "
    		Set RSAutori = Server.CreateObject("ADODB.Recordset")
    		RSAutori.Open SQLAutori, Conn, 1, 3
    
    		If NOT RSAutori.EOF Then
    			RSAutori.MoveFirst
    			If RSAutori("Password") = getSHAPassword(FPassword) Then
    				Session("BLOGNick") = RSAutori("Nick")
    				Session.TimeOut = 60
    				If RSAutori("Admin") = True Then
    					Session("BLOGAdmin") = True
    				Else
    					Session("BLOGAdmin") = False
    				End If
    				Response.Redirect "default.asp"
    			Else
    				Session("BLOGNick") = ""
    				Session("BLOGAdmin") = False
    				Response.Redirect "login.asp"
    			End If
    		Else
    			Session("BLOGNick") = ""
    			Session("BLOGAdmin") = False
    			Response.Redirect "login.asp"
    		End If
    	Else
    		Session("BLOGNick") = ""
    		Session("BLOGAdmin") = False
    		Response.Redirect "login.asp"
    	End If
    %>
    <%
    	Set RSAutori = Nothing
    
    	Conn.Close
    	Set Conn = Nothing
    %>
    Immagino che ci sia qualcosa che non va nel file del controllo, ma proprio non riesco a venirne a capo...

  2. #2
    Scrivi all'autore di dBlog e comunicagli il bug.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    In realtà, potrebbe non essere un bug, visto che andrebbe installto nella root del sito e, di conseguenza, non sono previste più installazioni sullo stesso sito.

    Mi posso comunicare da solo la presenza del bug, rispetto alla mia modifica, ma credo che questo poco aiuti...

    Qualche idea per trovare una soluzione?

  4. #4
    Allora, nella pagina di login fai sta modifica (vedi parti in neretto):
    codice:
    <%
    	'dBlog 2.0 CMS Open Source
    	'Versione file 2.0.0
    %>
    
    
    
    
    <%
    	Dim SQLAutori, RSAutori, FUserID, FPassword
    
    	FUserID = Request.Form("UserID")
    	FPassword = Request.Form("Password")
    
    	If FUserID <> "" AND FPassword <> "" Then
    		SQLAutori = " SELECT [Nick], [UserID], [Password], [Admin] FROM [Autori] WHERE [UserID] = '"& ControlloSQLInjection(FUserID) &"' "
    		Set RSAutori = Server.CreateObject("ADODB.Recordset")
    		RSAutori.Open SQLAutori, Conn, 1, 3
    
    		If NOT RSAutori.EOF Then
    			RSAutori.MoveFirst
    			If RSAutori("Password") = getSHAPassword(FPassword) Then
    				Session("BLOGNick") = RSAutori("Nick")
    				Session.TimeOut = 60
    				If RSAutori("Admin") = True Then
    					Session("BLOGAdmin") = True
    					Session("UserID") = RSAutori("UserID")
    				Else
    					Session("BLOGAdmin") = False
    					Session("UserID") = 0
    				End If
    				Response.Redirect "default.asp"
    			Else
    				Session("BLOGNick") = ""
    				Session("BLOGAdmin") = False
    				Session("UserID") = 0
    				Response.Redirect "login.asp"
    			End If
    		Else
    			Session("BLOGNick") = ""
    			Session("BLOGAdmin") = False
    			Session("UserID") = 0
    			Response.Redirect "login.asp"
    		End If
    	Else
    		Session("BLOGNick") = ""
    		Session("BLOGAdmin") = False
    		Session("UserID") = 0
    		Response.Redirect "login.asp"
    	End If
    %>
    <%
    	Set RSAutori = Nothing
    
    	Conn.Close
    	Set Conn = Nothing
    %>
    Ora c'è da modificare la pagina del blog per mettere il controllo che verifichi se l'ID dell'utente memorizzato in Session corrisponde all'ID dell'utente Administrator di quel determinato Blog.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Grazie per la risposta.

    Il file di controllo è questo.

    codice:
    If (Session("BLOGNick") = "" OR Session("BLOGNick") = Null) AND Mid(Request.ServerVariables("SCRIPT_NAME"), InStrRev(Request.ServerVariables("SCRIPT_NAME"), "/") + 1) <> "login.asp" Then
    Response.Redirect "login.asp"
    End If
    Credo che il problema stia qui. Visto che il blog è nato per essere l'unico blog del sito, qui si controlla solo la correttezza del BLOGNick, non si controlla se l'utente loggato esista nel db.
    Il db dovrebbe essere uno, quindi se sei dentro, vuol dire che la tua utenza è valida.

    Nella IF, vorrei aggiungere un OR "se a quel BLOGNick corrisponde un utente nel DB"... potrebbe essere una soluzione?

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Niente da fare...

    Qualcuno ha idea di come risolvere questo problema?

  7. #7
    se lo script di blog è lo stesso, sarà stessa il tipo di variabile di Sessione memorizzato per ogni utente che si logga nei diversi tipi di blog...visto che viaggi sullo stesso sito, se tu ti logghi su un sotto-blog e poi ti sposti al blog di anna (venendo da mario), il controllo del login (che immagino non sia quello che pesca nome utente e password dal db, ma un controllo sulla presenza o meno della sessione) ti vede come autenticato e quindi ti fa entrare anche nel blog di anna

    aggiungi una variabile di sessione del tipo "nome_blog" e controlla che la sessione oltre che esistere abbia anche un nome_blog coerente con le pagine che stai visualizzando


    sempre che abbia capito qual'è il problema, ho letto un pò di fretta la tua discussione e le relative risposte
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Da quello che mi dici, credo che tu abbia capito il problema.

    Questa è la struttura:
    root -> users -> mario -> blog -> admin
    root -> users -> anna -> blog -> admin
    così per tutti i blog.

    Lo script dei blog è lo stesso, la struttura delle cartelle è quella indicata qui sopra e ho creato un db per ogni blog (quindi, ci sarà mario.mdb, anna.mdb, ecc.).

    Da un punto di vista teorico mi è chiaro ciò che mi stai dicendo, non mi è invece chiaro come renderelo in pratica.

    Aggiungo la variabile si sessione nel file di controllo del login (è il codice che ho postato nel primo post)? E che valore dovrei assegnare a tale variabile?

    Need help! Thanx!

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Ho risolto il problema semplicemente assegnando nomi diversi alle variabili di sessione.
    Ho modificato il nome della variabile, da BLOGNick in BLOGNick1 per il primo blog, BLOGNick2 per il secondo, e così via. Adesso funziona.

    Grazie a tutti per l'aiuto.

  10. #10
    Originariamente inviato da Roby140569
    Grazie per la risposta.

    Il file di controllo è questo.

    codice:
    If (Session("BLOGNick") = "" OR Session("BLOGNick") = Null) AND Mid(Request.ServerVariables("SCRIPT_NAME"), InStrRev(Request.ServerVariables("SCRIPT_NAME"), "/") + 1) <> "login.asp" Then
    Response.Redirect "login.asp"
    End If
    Credo che il problema stia qui. Visto che il blog è nato per essere l'unico blog del sito, qui si controlla solo la correttezza del BLOGNick, non si controlla se l'utente loggato esista nel db.
    Il db dovrebbe essere uno, quindi se sei dentro, vuol dire che la tua utenza è valida.

    Nella IF, vorrei aggiungere un OR "se a quel BLOGNick corrisponde un utente nel DB"... potrebbe essere una soluzione?
    Nella pagina di ogni blog devi verificare che il valore UserID salvato in Session sia uguale allo UserID dell'utente abilitato a gestire quel determinato blog.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.