Guide

Protezione di pagine ASP tramite variabili di sessione

Esempio di programmazione in ASP

Di seguito un esempio di come si può proteggere l'accesso alle pagine di un sito, utilizzando il linguaggio ASP.
Nell'esempio la pagina da proteggere è inizia.asp, di seguito tutti i file necessari oltre a questo:

La logica di base è piuttosto semplice: verificato il login, viene impostata una variabile di sessione, session("autorizzato"), che resterà attiva fintanto che il server manterrà attiva la sessione e che verrà poi controllata all'accesso di ogni pagina da proteggere.

Per semplicità, tutti i nomi utente e le rispettive password sono contenuti in un file di testo in chiaro - pasx.txt -, anche se comunemente tali dati sono conservati in un database con password criptate.

Il contenuto del file pasx.txt è il seguente.

prova~:~prova
test~:~test
tentativo~:~tentativo

dove, ogni riga del file contiene una coppia (userid,passwd) separata dai caratteri speciali ~:~.

Il controllo avviene tramite lo script check.asp che verifica se la variabile di sessione autorizzato è attiva: se è attiva il codice prosegue nella sua esecuzione visualizzando, quindi, la pagina protetta; altrimenti, reindirizza l'utente allo script destroy.asp che distrugge la sessione e fornisce un messaggio all'utente (descritto dopo).

Il contenuto del file check.asp è mostrato di seguito.

<%
if session("autorizzato") <> 1  then response.redirect("destroy.asp")
%>

Una volta attivata la variabile di sessione session("autorizzato"), ogni pagina che includerà lo script check.asp sarà visualizzata senza problemi. Quindi, tutte le pagine da proteggere dovranno contenere, prima del tag , la seguente riga di codice:

<!-- #include file="check.asp" -->

Lo script login.asp mostra all'utente il form di accesso (dove inserire utente e password) e di verificare che i valori immessi corrispondano ad una delle coppie presenti nel file pasx.txt. Se l'utente risulta autorizzato, viene reindirizzato alla prima pagina protetta (in questo caso inizia.asp). In caso contrario viene eseguito lo script destroy.asp che elimina tutto il contenuto della sessione aperta e visualizza all'utente un messaggio di errore o accesso non autorizzato.

Il contenuto del file login.asp è il seguente.

<%
if session("autorizzato") = 1 then response.redirect("inizia.asp")
invio = request("invio")
if (invio = "invio") then
	userid = request("userid")
	passwd = request("passwd")
	percorsopasx = Server.MapPath("testi/pasx.txt")
	Set oggettoFileSystem = Server.CreateObject("Scripting.FileSystemObject")
	Set oggettoFile = oggettoFileSystem.OpenTextFile(percorsopasx, 1)
	trovato = false
	do while not(oggettoFile.AtEndOfStream) and not(trovato)
		linea = oggettoFile.ReadLine
		if (InStr(linea, userid) > 0) then trovato = true end if
	loop
	oggettoFile.close
	Set oggettoFileSystem = nothing
	Set oggettoFile = nothing
	userdata = split(linea,  "~:~", -1, 1)
	password = trim(userdata(1))
	if ((trovato)  and (passwd = password) ) then
		session("autorizzato") = 1
		response.redirect("inizia.asp")
	else
		response.redirect("destroy.asp")
	end if
else
' HTML %>
<table border="0" cellspacing="0" cellpadding="4" border="0" bgcolor="#FF0000">
  <tr>
    <td>
      <form method=post action="login.asp">
      inserite nome utente e password
        <table width="300" cellpadding="4" cellspacing="1" align="center">
          <tr>
            <td>
              nome utente: 
            </td>
            <td>
              <input type="text" name="userid">
            </td>
          </tr>
          <tr>
            <td>
              password: 
            </td>
            <td>
              <input type="password" name="passwd">
            </td>
         </tr>
         <tr>
            <td colspan="2">
              <input type="submit" name="invio" value="invio">
              &nbsp;&nbsp;
              <input type="reset" name="cancella" value="cancella">
            </td>
         </tr>
       </table>
     </form>
   </td>
  </tr>
</table>
<% 'fine HTML
End if
%>

Il contenuto del file destroy.asp è il seguente.

<%
session("autorizzato") = -1
Session.Abandon
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<head>
<title> LogOut </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
<h3>Area Riservata - Accesso non autorizzato</h3>
<br>
effettuate il <a href="login.asp">login</a>
</body>
</html>

In generale, la sessione può essere terminata in due modi: chiudendo il browser o richiamando lo script destroy.asp; ovviamente si usa destroy.asp quando si vuole forzare la cancellazione della sessione.

Gli script mostrati in questo breve esempio ovviamente non sono completi e devono essere opportunamente integrati nelle pagine del sito. Di seguito, un esempio di pagina protetta dalla variabile di sessione autorizzato, inizia.asp.

<!-- #include file="check.asp" --> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<head>
<title> Pagina di test - ASP login </title>
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
Esempio: login effettuato con successo
</body>
</html>