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...