|
Protezione
di siti con codice di accesso, con possibilitá di richiesta di autorizzazione
di Nino Vessella
La versione precedente di questo codice permetteva l'accesso alle pagine protette solo
ai visitatori autorizzati dall'amministratore del sito. Con le modifiche
illustrate qui, un visitatore puó
-
inserire
tutti i dati richiesti, quindi codice compreso, e quindi
leggere le pagine protette
-
inserire solo il
proprio
nome e il proprio indirizzo di posta elettronica e chiedere
il codice di accesso, che riceverá automaticamente all'indirizzo
indicato. A un visitatore giá registrato viene
inviato il vecchio codice, quindi si puó
utilizzare questa procedura nel caso di
dimenticanze.
La creazione e l'invio del
codice di accesso é completamente automatizzata, quindi
l'amministratore del sito, in questa versione, se non
utilizza un appropriato pannello di gestione del proprio
sito, non puó effettuare "censure" immediate.
Il sistema ha subito varie modifiche rispetto alla
prima versione, quindi fare attenzione alla parti in
rosso.
Il visitatore viene identificato dalla stringa nome/indirizzo/codice, memorizzata
in un archivio Access (.mdb), che per i soliti e ovvi motivi di sicurezza
é conservato in una cartella protetta (fpdb, per chi usa FrontPage).
Questo codice presuppone la seguente struttura del sito:
- /dominio
- /inc
- /fpdb
- /kinga
- /altrecartelle
- paginaprotetta.asp
Nella cartella /inc vi sono i codici da includere, in /fpdb l'archivio
.mdb dei
visitatori autorizzati, in /kinga le pagine di
protezione descritte qui. Le pagine protette (paginaprotetta.asp) possono trovarsi ovunque.
La prima pagina é il solito modulo d'iscrizione da riempire, questa volta, con
un nome, l'indirizzo di posta elettronica e il codice di accesso. Quest'ultimo é da
inserire due volte. Inoltre, mettendo un segno di spunta nell'apposito quadratino é
possibile ricevere all'indirizzo indicato il codice, nuovo per il visitatore
che volesse registrarsi, vecchio per colui che l'avesse dimenticato.
Registrazione
cdEntra.asp
<%
=session.abandon
nPagina=Request.QueryString("pag")
%>
<html>
<head>
<title>
Protezione sito</title>
</head>
.
.
.
|
La prima linea azzera tutte le variabili della sessione.
Bisogna inserirla prima del codice <HTML>.
La pagina protetta, come si vedrá piú avanti, passa il suo
URL a cdEntra, che lo memorizza nella variabile nPagina
l'URL della pagina protetta. Questa variabile servirá in
seguito per ritornare alla pagina protetta, che cosí non deve
essere necessariamente nella stessa cartella in cui si trovano
i codici di protezione e quindi puó trovarsi in qualsiasi
cartella del sito.
Poi segue la funzione, kagua():
<SCRIPT TYPE="text/javascript">
<!--
function kagua()
{
if (document.entra.nome.value == "")
{
alert("Scrivere il nome utente.");
return false;
}
else
{
if (document.entra.nuovo.value==false)
{ if (document.entra.cod.value !=
document.entra.controllo.value)
{
alert('Il codice di accesso non é corretto!');
return false;
}
} else
{
if (document.entra.indirizzo.value == "")
{
alert ("Scrivere l'indirizzo di posta elettronica.");
return false;
}
at=document.entra.indirizzo.value.indexOf('@');
if ( (at==-1) || (document.entra.indirizzo.value.substring(at+1).indexOf('.')==-1) )
{
alert ("Indirizzo non valido!");
return false;
}
return true;
}
}
}
//-->
</SCRIPT>
.
.
.
|
Questa funzione confronta le due
immissioni di codice, se non corrispondono il visitatore
viene rimandato al modulo.
Alla funzione segue il codice html del modulo di
registrazione, chiamato entra (name="entra"), con cui si chiede al visitatore
di inserire i propri dati:
.
.
.
<body bgcolor=
"#ffffff"
text=
"#000000"
> <div align=
"center"
> <center>
<table border=
"0"
width=
"600"
> <tr>
<td>
<div align=
"center"
>
<center>
<table
border=
"4"
cellpadding=
"6"
cellspacing=
"0"
width=
"475"
>
<tr>
<td
width=
"100%"
bgcolor=
"#000000"
colspan=
"2"
>
<font color=
"#ffffff"
face=
"Arial"
><strong>
<IMG height=32
alt=
"kufuli.gif"
src=
"/images/kufuli.gif"
width=
32
align=
left
>
Sito di Nino Vessella
</strong>
</font>
</td>
</tr>
<form method=
"post"
name=
"entra"
action=
"/kinga/cdkodo.asp"
onSubmit=
"return kagua()"
>
<tr>
<td
bgcolor="#c0c0c0"
valign=
"top"
>
<div
align=
"right"
><p><small><font face=
"Arial"
>
<strong>
Nome del visitatore:
</strong>
</font></small>
<input
name="nome"
></p>
</div>
<p>
<div align="right"><p><small><font
face="Arial"
>
<strong>
Indirizzo del visitatore:
</strong>
</font></small>
<input name="indirizzo"></p>
<div align="right">
<p>
<small>
<font face=
"Arial"
>
<u>
Esempi
</u>
: nome_123@xxx.it
<br>
cognome@xxxx.it
</font></small>
</p>
</div>
</div>
<div
align="right"><p><small><font
face="Arial">
<strong>Codice d'accesso:</strong>
</font></small>
<input type="password"
name="cod"
maxlength=10></p>
</div>
<div
align="right"><p><small><font
face="Arial">
<strong>Verifica Codice
d'accesso:</strong>
</font></small>
<input type="password"
name="controllo"></p>
</div>
<div align=
"left"
><p><small><font face=
"Arial"
>
<strong>
Codice dimenticato o nuovo?
</strong>
</font></small>
<input
type=
"checkbox"
name=
"nuovo"
value=
"ON"
>
</br>
Ti sarà inviato all'indirizzo
suindicato.
</p>
<input
type="hidden" name="pagina"
value="<%=nPagina%>">
</div>
</td>
<td width="80"
bgcolor="#c0c0c0"
valign="top"
align="middle">
<div align="left">
<div align="center"></div>
<div align="center"></div>
<div align="center">
<center><p><small><font face="Arial">
<input
type="submit"
value=" Invia ">
</font></small></p>
</center>
</div>
<div
align="center"
><center><p><small><font
face="Arial">
<input
type="reset"
value="Annulla">
</small></FONT></p></center>
</div>
<div align="center"><center><p><small><font
face="Arial">
<input
type="button"
value="Esci"
onClick="history.go(-1)">
</small></FONT></p></center>
</div>
</td>
</tr>
</form>
</table>
</center>
</div>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
|
Si tratta di un "comune" modulo di inserimento dati. Notare soltanto la variabile nascosta (hidden)
pagina per inviare l'URL della pagina protetta al codice
successivo e l'azione del bottone Esci che simula il pulsante Indietro
del programma di navigazione.
Infine i dati vengono inviati alla pagina con il codice per
la ricerca del visitatore nell'elenco di quelli autorizzati.
Controllo registrazione
cdkodo.asp
In questa pagina innazitutto notare l'inclusione del file ilpostinoinc.asp.
Esso contiene la funzione Invia() per la spedizione dei messaggi tramite
CDONTS (illustrata in Esempio di utilizzo di CDONTS)
Subito dopo si definiscono e inizializzano alcune variabili con i valori inseriti
nel modulo della pagina cdentra.asp, in particolare nPagina che contiene l'URL della pagina protetta, nNome,
nCod e nIndirizzo che contengono i dati del visitatore e
lNuovo che serve per individuare il visitatore che vuole un codice di
accesso.
<!-- #include virtual="/inc/ilpostinoinc.asp" -->
<%
' adovbs.inc:
Const adOpenKeyset = 1
Const adLockPessimistic = 2
Const adCmdText = &H0001
Dim oConn
Dim oRS
Dim lTrovato
Dim sErr
Dim nNome
Dim nCod
Dim nIndirizzo
DIM lNuovo
lNuovo=false
if Request.form("nuovo")="ON" then
lNuovo=true
end if
nNome=request.form("nome")
nCod=request.form("cod")
nIndirizzo=request.form("indirizzo")
nPagina=request.form("pagina")
.
.
.
|
Poi si controlla la variabile lNuovo, se é vera il visitatore é
nuovo o ha dimenticato il codice di accesso, allora si cercano nome e
indirizzo del visitatore nell'archivio kodoj.mdb, se non vi sono
allora, ovviamente, si tratta di una nuova iscrizione, quindi:
- si genera un codice di accesso con la funzione fn_genKodo
- si registra il tutto
- si manda un messaggio all'indirizzo del visitatore con il codice personale
- si visualizza un messaggio con cui si informa il visitatore dell'avvenuta
registrazione e dell'invio del codice personale
Questa informazione viene visualizzata dal codice contenuto nella pagina
cdAvviso.asp.
L'accesso comunque non viene permesso a coloro che non usano il proprio
indirizzo, cioé quello a cui viene inviato il codice.
Se i dati inseriti dal visitatore vengono trovati, allora si tratta di
qualcuno che ha dimenticato il codice di accesso. Quindi, non si genera
alcun codice, e il codice che viene inviato al visitatore é quello che
aveva giá.
Notare che il codice, essendo generato automaticamente, puó essere personalizzato
solo rivolgendosi all'amministratore del sito che puó modificare l'archivio.
.
.
.
If lNuovo then
' Nuovo visitatore
SQL = "SELECT * FROM codici WHERE nome='" & nNome &
_
"' and indirizzo='" & nIndirizzo & "'"
Set oRS=Server.CreateObject("ADODB.Recordset")
oRS.Open SQL,"DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& _
Server.MapPath("/fpdb/kodoj.mdb") & ";", _
adOpenKeyset, adLockPessimistic, adCmdText
If oRS.EOF then
' Se non é stato trovato, si tratta di una richiesta
' di iscrizione
' Genera il codice e inserisce in archivio
sKodo=fn_GenKodo(10,"")
oRS.AddNew
oRS.Fields("nome") = nNome
oRS.Fields("indirizzo") = nIndirizzo
oRS.Fields("codice")= sKodo
oRS.Update
end if
oRS.MoveFirst
sKodo=oRS("codice")
oRS.Close
Set oRS = Nothing
' Non permette l'accesso perché prima lo spedisce al richiedente
' per verificare l'esattezza dell'indirizzo
' Le seguenti variabili sono da personalizzare!!!
sOggetto="Karibu! Codice di accesso"
sSaluti="Salve " & nNome & ", " & vbCrLf
sTesto1="grazie per esserti registrato al sito Karibu! " &
vbCrLf & _
"Per visitare le pagine richieste immetti i seguenti dati: " & _
" - Nome utente: " & nNome & vbCrLf & " - Indirizzo: " & nIndirizzo & vbCrLf & _
" - Codice di accesso: " & sKodo & vbCrLf
sTesto2 = " Se dovessi dimenticare il codice di accesso, potrai richiederlo con la stessa procedura " & _
" seguita per l'iscrizione. Ricordati di usare lo stesso nome utente e lo stesso indirizzo " & _
" di cui sopra. " & vbCrLf
sTesto3 = " Questi dati non saranno diffusi in alcun modo senza una tua esplicita autorizzazione. " & _
" Essi serviranno solo per registrare i tuoi risultati nello svolgimento degli esercizi. "
sTesto4 = vbCrLf & vbCrLf
sTesto5 = " Grazie, " & vbCrLf & " Nino" & vbCrLf & " -
Karibu!"
sMessaggio = sSaluti & sTesto1 & sTesto2 & sTesto3 & sTesto4 & sTesto5
' Anche qui bisogna inserire l'indirizzo appropriato
sErr = Invia( _
":nino@vessella.it", _
nPagina, _
nIndirizzo, _
nNome, _
sOggetto, _
sMessaggio, true )
If sErr = "" Then
Response.Redirect "/kinga/cdAvviso.asp"
Response.Flush
Response.End
else
' Messaggio di errore
Response.Write ("Risultato:" & "<BR>")
Response.Write ("..." & sErr)
End If
.
.
.
|
Se, invece, la variabile lNuovo é falsa si attiva la procedura di
controllo della registrazione e ammissione alla lettura della prima pagina
protetta con il comando response.redirect "PrimaPagina.asp".
Se non risulta iscritto o se ha inserito dati non corretti viene invitato
a controllare i dati (response.redirect "cderrato.asp").
La protezione delle pagine si basa sulla variabile di sessione ID, Session("ID"),
a cui viene assegnata la stringa nNome & nIndirizzo & nCod oppure viene
viene lasciata vuota.
.
.
.
else
lTrovato=true
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& _
Server.MapPath("/fpdb/kodoj.mdb")
SQL = "Select * From codici where nome='" & nNome & _
"' and indirizzo='" & nIndirizzo & "' and codice='" & nCod & "'"
Set oRS = oConn.Execute(SQL)
if oRS.EOF then
lTrovato=false
end if
oRS.Close
oConn.Close
Set oRS = Nothing
Set oConn = Nothing
if lTrovato then
Response.Cookies("biscotto")= nNome & "&" & nIndirizzo & "&" & nCod
Response.Cookies("biscotto").Expires="December 30, 2035"
Session("ID")= nNome & "&" & nIndirizzo & "&" & nCod
Response.Redirect nPagina
else
Session("ID")=""
Response.Redirect "/kinga/cdErrato.asp"
end if
end if
.
.
.
|
In fondo alla pagina si trova una funzione, fn_GenKodo(), per la
generazione automatica di codici di accesso.
Notare che utilizza due parametri:
- nLunghezza= lunghezza del codice di accesso da generare
- sCarValidi = caratteri utilizzabili, in mancanza la funzione
utilizza i caratteri: A-Za-z0-9.
.
.
.
Function fn_GenKodo( nLunghezza, sCarValidi)
' nLunghezza = lunghezza del codice di accesso da generare
' sCarValidi = caratteri utilizzabili
' Se non vengono specificati di utilizzano i caratteri: A-Za-z0-9
Const sCarPredef = "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ0123456789"
Dim nContatore
Dim sRet
Dim nNumero
Dim nLength
Randomize
If sCarValidi = "" Then
sCarValidi = sCarPredef
End If
nLength = Len(sCarValidi)
For nContatore = 1 To nLunghezza
nNumero = Int((nLength * Rnd) + 1)
sRet = sRet & Mid( sCarValidi, nNumero, 1 )
Next
fn_GenKodo = sRet
End Function
%>
|
Iscrizione di un nuovo visitatore
cdAvviso.asp
<!--#include virtual ="/kinga/cdentra.asp"-->
<%
Response.Write("<CENTER>" & _
"La richiesta é stata accolta.<BR>" & _
"Il codice di accesso é stato inviato all'indirizzo indicato.<BR></CENTER>")
%>
|
Questa pagina contiene solo queste poche righe di codice
che scrive un messaggio nel documento cdentra.asp
con il comando Response.write. Il messaggio informa
il visitatore dell'avvenuta iscrizione e dell'invio del codice
al suo indirizzo di posta elettronica.
Visitatore non autorizzato o dati errati
cdErrato.asp
<!--#include virtual ="/kinga/cdentra.asp"-->
<%
Response.Write("<center>
Hai inserito dati non validi. Per favore riprova.<BR></CENTER>")
%>
|
Anche questa pagina contiene solo queste poche righe di codice
che scrive un messaggio nel documento cdentra.asp
con il comando Response.write. Il messaggio avverte
il visitatore che i dati inseriti sono errati e che quindi vanno
reinseriti.
Pagina protetta
Ecco, infine la pagina (asp) protetta. Dopo aver inserito i dati
corretti, il visitatore viene ammesso alla pagina cercata (in questo caso la
prima pagina) nella quale deve essere inserito il seguente codice.
<%
Session("id")=Request.Cookies("biscotto")
If Session("id") = "" Then
Response.Redirect "/kinga/cdEntra.asp?pag="
& _
URLEncode("/paginaprotetta.asp")
End if
%>
<HTML>
<HEAD>
<TITLE>Sito di Nino Vessella</TITLE>
.
.
.
Contenuto della pagina
.
.
.
</HTML>
|
Il codice deve essere inserito all'inizio di tutte le pagine asp
da proteggere. Esso controlla l'accesso alla pagina tramite la variabile di sessione ID,
se é vuota il visitatore non é autorizzato e quindi gli viene presentata la pagina di registrazione
cdentra.asp.
La variabile di sessione ID é stata valorizzata dal codice cdKodo, ma se il
visitatore é stato autorizzato durante una sua precedente visita nel suo elaboratore ha
un "biscottino" che gli permette di richiamare la pagina senza dover reinserire i suoi
dati.
Se si vuole disattivare questa funzione basta togliere la riga session("id")=Request.Cookies("biscotto").
Questo codice non permette ai visitatori non autorizzati l'accesso alla pagina senza prima passare
per cdentra.asp.
Le sessioni durano 20 minuti, ma questo tempo puó essere cambiato
assegnando all'inizio della pagina kdkodo.asp alla
variabile session.timeout il valore desiderato (nell'esempio
5 minuti):
Ricordarsi di salvare la lista o l'archivio dei visitatori
(nome/indirizzo/codice) in una cartella nascosta
diversa da quella delle pagine protette in modo da impedirne il prelevamento.
Ricordarsi, inoltre, di personalizzare tutte le variabili che hanno i miei dati (biscotto, mailto:nino@vessella.it, ecc.).
Per provare questo sistema,
visitare la pagina Esercizi di Inglese tecnico.
Scarica i file
Ultima modifica: 20010301
Numero di lettori dal 16/12/2000:
|