|
Protezione di siti con codice di accesso
(Password)
Articolo di Rob Taylor
trovato in
www.4guysfromrolla.com
tradotto e variamente modificato da Nino Vessella
Questo é un sistema di protezione che permette
la lettura delle pagine di un sito solo ai visitatori
autorizzati, infatti se un visitatore cerca di leggere una
qualsiasi pagina protetta viene invitato a "farsi
riconoscere".
(Se volete provare una versione migliorata di questo sistema,
visitate la pagina Esercizi di Inglese tecnico.)
Il metodo proposto usa la coppia di dati indirizzo/codice.
Le informazioni possono essere memorizzate in un file di testo
o in un archivio Access (.mdb). Per motivi di sicurezza é
importante nascondere questo archivio, altrimenti é facilmente
scaricabile. (Vedi: FrontPage e Database)
Il metodo presuppone una struttura del sito di questo tipo:
- /dominio
- /fpdb
- /kinga
- /altrecartelle
- paginaprotetta.asp
Nella cartella in /fpdb l'archivio .mdb dei
visitatori autorizzati, in /kinga le pagine di
protezione descritte qui. Le pagine protette (paginaprotetta.asp) possono trovarsi ovunque.
Per il file di testo il metodo usa il FileSystemObject.
La prima pagina é un normale modulo d'iscrizione che chiede
l'indirizzo di posta elettronica del visitatore e il suo codice.
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.cod.value != document.entra.controllo.value)
{ alert('Il codice di accesso non corrisponde!')
return false;
} else {
return true;
}
}
//-->
</SCRIPT>
|
Questa funzione confronta le due
immissioni di codice, se non corrispondono il visitatore
viene rimandato al modulo.
La funzione precede il
codice html, come il seguente esempio, del
modulo di registrazione:con cui si chiede al
visitatore di inserire il codice due volte:.
<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>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>
</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="hidden" name="pagina"
value="<%=nPagina%>")
<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>
</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 si inizializzano due variabili di sessione con i valori inseriti
nel modulo della pagina cdentra.asp.
Una per l'indirizzo di posta elettronica e l'altra per il codice
d'accesso dell'utente (visitatore).
|
<%
Session("utente")=request.form("indirizzo")
Session("id")=
request.form("cod")
nPagina=request.form("pag")
.
.
.
|
Poi si cercano i dati inseriti nell'elenco dei visitatori
autorizzati. Elenco che puó essere un file di testo oppure un
archivio .mdb
I soluzione: File di testo
.
.
.
set oCod =
Server.CreateObject("Scripting.FileSystemObject")
set lgFile =
oCod.openTextFile(Server.MapPath("codici.txt"))
While not lgFile.AtEndOfStream
if lgFile.ReadLine=Session("utente") & " " & Session("id") Then
lgfile.close
Response.Redirect "PrimaPagina.asp"
End If
WEND
Response.Redirect "cdErrato.asp"
%>
|
I codici vengono cercati in un documento di testo contenuto in una
cartella nascosta.
L'elenco dei codici viene letto linea per linea fino a trovare
l'indirizzo e il codice del visitatore. Notare che l'istruzione
lgFile.ReadLine, che legge ciascuna linea, contiene i
caratteri: & " " &. La linea ha il seguente
formato: indirizzo, uno spazio, il codice.
Ovviamente l'indirizzo e il
codice possono essere separati da qualsiasi
numero di spazi. Il codice precedente legge
righe con dati separati da un solo spazio.
II soluzione: Archivio .mdb
.
.
.
Dim Conn
Dim oRS
Set Conn =
Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="
& _
Server.MapPath("/fpdb/xxxxx.mdb")
SQL = "Select * From codici"
Set oRS =
Conn.Execute(SQL)
while not oRS.EOF
If session("utente") = oRS("Utente")
And session("id") = oRS("Codice")
Then
oRS.Close
Conn.Close
Set oRS = Nothing
Set Conn = Nothing
Response.Redirect nPagina"
end if
oRS.MoveNext
wend
oRS.Close
Conn.Close
Set oRS = Nothing
Set Conn = Nothing
Response.Redirect "/kinga/cderrato.asp"
%>
|
I codici vengono cercati in un archivio .mdb memorizzato in una
cartella nascosta. (Scusate se insisto, ma createla:
FrontPage e Database!)
Dopo l'apertura dell'archivio composta da una tabella codici
con i campi utente e codice. Viene verificata l'esistenza
dei dati inseriti dal visitatore.
In tutti e due i casi, se la ricerca ha buon fine, cioé il codice
cercato viene trovato, il visitatore viene indirizzato alle altre
pagine del sito con il comando response.redirect PrimaPagina.asp.
Altrimenti viene invitato a controllare i dati (response.redirect
"cderrato.asp").
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>")
%>
|
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.
<%
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,
se é vuota il visitatore non é autorizzato
e quindi gli viene presentata la pagina di registrazione
cdentra.asp.
Questo codice non permette 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
(indirizzi/codici) in una cartella nascosta diversa da quella delle
pagine protette in modo da impedirne il prelevamento.
Se volete provare una versione migliorata (illustrata in
Proteggere un sito in ASP (II)) di questo sistema,
visitate la pagina Esercizi di Inglese tecnico.
Ultima modifica: 20010301
Numero di
lettori dal 7/12/2000:
|