Newsgroup: it.comp.www.asp
Titolo: Immagini protette con ADODB.Stream

Sto cercando di proteggere alcune immagini di un sito, così che non possano
essere visualizzate da tutti gli utenti, ma solo da alcuni gruppi (definiti
nel sito stesso).
Il sito è in classic ASP3.0 / XHTML / SQLServer2000
Attualmente uso la forma <img class="ThumbImg" src="imgstream.asp" alt="" />
Nella pagina imgstream.asp viene creato l'oggetto ADODB.Stream e restituita
l'immagine (con gli appropiati HTTP Headers) come stream binario.
Questo però purtroppo non risolve il problema, in quanto chiunque potrebbe
accedere alla pagina di streaming direttamente.
Occorre una qualche forma di controllo di autenticazione. E anche questo è
fattible, anche se con alcune difficoltà, visto che la gestione degli
accessi fa parte di un sistema integrato nella piattaforma e prevede la
presenza di alcuni tag, mentre la pag imgstream.asp deve restituire SOLO
l'immagine.
Ma anche riuscendo a fare questo, il problema più grande è che, se si
utilizza questo metodo per proteggere anteprime delle immagini, dove ci sono
10-20 anteprima equivale ad avere 10-20 accessi Cokkies/DB per la verifica
dei permessi. Improponibile.
UNa soluzione che ho pensato è generare dalla pagina chiamante un ID univoco
e salvarlo nel DB e passarlo alla pagina di streaming insieme ad un
contatore (imgstream.asp?ID=HASJK...&C=20) sempre nel tag <img> e fare in
modo che poi la pagina di streaming incrementi il contatore nel DB fino al n
20 e poi cancelli il record con la chiave. Questo sarebbe cmq meno
dispendioso che utilizzare la classica procedura di verifica dei permessi
utilizzata per gli utenti, ma cmq laborioso e macchinoso.
In realtà l'unica soluzione plausibile che mi viene in mente è includere il
codice di streaming nella pagina chiamante, sostituendo il tag <img
src="...asp"> con una subroutine che ottiene l'immagine in streaming. In
questo modo ci sarebbe il classico controllo degli accessi, una sola volta e
le img sarebbero recuperate in streaming da una cartella al di fuori della
web root.
Purtroppo ho provato in diversi modi, ma ottengo solo una sfilza di codice
binario, anche settando il content-header a "image/gif" (o "image/jpeg")
Qualche soluzione?
Grazie in anticipo.
--
:: Massimiliano Mattei
:: Project Leader
:: E.xtranet V.irtual A.pplication

Ciao,
Devo dire che la faccenda è un po complicata.
Spero di aver capito tutto come si deve.
Da come la vedo io, cmq, è sbagliato l'approccio: se tu devi proteggere una
galleria di immagini, non chiedi la protezione per ogni singola immagine, ma
chiedi la protezione ad un livello più alto: la tua galleria di immagini
dovrà essere creata a runtime da una funzione che, una volta stabilito il
grado di authority dell'utente corrente, provvederà a chiamare la pagina che
fa lo streaming (se le immagini sono nel db come campi binary, ovviamente,
come mi sembra d'aver capito) solo per le immagini cui l'utente è
autorizzato.
spero di essermi spiegato!
Ciao
--
Alessandro
UGIdotNET - User Group Italiano .NET
http://www.ugidotnet.org

Ciao Alessandro,
intanto grazie della risposta.
Attualmente le immagini non sono nel DB (ho cercato di evitare questo tipo
di approccio) ma sono dei semplici file che risiedono in una cartella sul
server, al di fuori della web root, quindi non sono accessibili con un
normale percorso relativo o tramite URL.
Anche se le immagini risiedessero nel DB, il problmea rimarrebbe quello di
avere un codice del tipo: <img src="streaming.asp" ... />
Dove nella pagina streaming.asp si interroga il db e si rimanda indietro
l'immagine come stream binario.
Il punto è che per garentire il livello di autenticazione che viene
utilizzato dal sito e non permettere a chiunque di visualizzare le immagini,
semplicemente accedento alla pagina "streaming.asp", occorrerebbe in questa
stessa pagina (oltre che nella pagina chiamante come avviene per ogni pagina
del sito) effettuare dei controlli sui permessi dell'utente, confrontando i
cookies (o le sessioni se vuoi).
Questo non presenta grossi problemi nel caso di una singola immagine, ma in
una pagina con diverse a"anteprime", sarebbe una soluzione poco scalabile.
Non posso usare un filtro ISAPI, perchè l'hosting provider dove mi appoggio
(
http://www.1planhost.com
) non lo permette.
La soluzione ideale sarebbe poter ottenere questo risultato, anche
attraverso il DB come nel tuo esempio, restando nella stessa pagina, senza
dover cioè ricorrere ad una pagina esterna per lo streaming, come invece
avviene nell'esempio che ho portato: <img src="streaming..asp"... />
E' vero anche, qualcuno obietterà, che in genere le "anteprime" o i
"thumbnails" che dir si voglia, in genere sono pubblici, ma già che ci sto,
approfitto per esplorare ogni possibilità
