Se avete la necessità di mostrare delle immagini in un'area riservata, vi sarete accorti che proteggere le cartelle che le contengono non è immediato, soprattutto se l'utente viene a conoscenza dell'URL dell'immagine stessa; conoscendo quest'unica informazione è semplice aggirare le protezioni e visualizzare l'immagine, anche se esistono tecniche per nasconderne la posizione, ma questi espedienti non danno la sicurezza che l'immagine non possa essere mostrata.
In questo breve articolo impareremo a proteggere le nostre immagini in modo che nessun utente possa vederle se prima non viene autenticato (assumiamo per semplicità che l'utente si dice autenticato se è presente una variabile di Sessione "AutenticazioneOK", omettiamo così il codice di autenticazione vero e proprio).
Proteggere le immagini con l'oggetto Stream di ADO
La prima soluzione è quella di creare una pagina ASP che verifichi la presenza della variabile di sessione, in questo caso mostra l'immagine mediante l'inserimento del tag <img>, altrimenti visualizza la scritta "Utente non autenticato!":
<% if Session("Aut") = "OK" then 'Supponiamo che l'immagine da mostrare 'My_Imm.jpg' sia nella sottocartella 'images' Response.Write "<img src='images/My_Imm.jpg' alt='Ecco la foto'> else Response.Write "Utente non autenticato!" end if %>
Questa soluzione è aggirabile, soprattutto nel caso in cui si conosca il nome e il percorso dell'immagine: basta aprire il browser e scrivere l'URL completo nella barra degli indirizzi, apparirà l'immagine anche senza essere stati autenticati. Un utente autenticato può comunicare l'indirizzo ad un altro non autenticato e questo viola i nostri criteri di protezione.
Prendiamo quindi lo script #191 di unoscript@algiorno, che ci mostra come proteggere il download di file attraverso la gestione dei tipi MIME e l'uso degli Stream di ADO: adatteremo questo script alle nostre esigenze e creeremo una pagina che ci mostrerà invece un'immagine.
Per prima cosa dobbiamo proteggere da occhi indiscreti la nostra cartella che contiene le immagini, per fare questo apriamo la console di gestione di IIS e cerchiamo la cartella images, clicchiamo con il tasto destro e poi su Proprietà. Nella scheda che si apre togliamo il segno di spunta dalla voce "lettura": in questo modo l'utente generico visitatore del web non potrà leggere i file contenuti nella cartella.
Adesso dobbiamo fare in modo che una pagina ASP (che viene eseguita sul server e ha quindi il diritto di leggere anche la cartella di cui sopra) verifichi che l'utente è autenticato e quindi gli mostri l'immagine richiesta.
La prima parte è ovviamente identica allo script #191, inseriamo solo qualche controllo sull'esistenza del file e un'ulteriore Variabile di Sessione "ImgName" che indichi il nome dell'immagine, per poter riutilizzare la pagina stessa in più occasioni.
Creiamo un quindi un file "readimg.asp" e iniziamo ad inserire il codice seguente:
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library" --> <% ' METADATA SERVE PER IMPORTARE LE COSTANTI DI ADO2.5 Dim FileObject, FName, FExists Set FileObject=CreateObject("Scripting.FileSystemObject") FName = Server.MapPath("foto/" & Session("ImgName")) FExists=FileObject.FileExists (FName) Set FileObject=Nothing %>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.