PDA

View Full Version : [ASP] Impedire accesso diretto a file


GTCstyle
21-03-2014, 20:12
Salve ragazzi

devo realizzare un software (ho una bozza in ASP, ma non avrei problemi a migrare ad altri linguaggi come il PHP, se fosse necessario) che visualizzi la lista di file e cartelle contenute in un percorso.
Chi non si autentica mediante username e password non ha l'accesso alla pagina che mostra i file, e quindi non può accedervi.

Problema:
se mi loggo, e voglio accedere al file della lista chiamato 33.pdf, il browser richiama la pagina:
http://archivio/view.asp?file=33.pdf
Nessun problema fin qui... Infatti se non eseguo il login ed digito "a mano" sul browser l'indirizzo http://archivio/view.asp?file=33.pdf, la pagina mi restituisce un errore e mi invita ad eseguire l'accesso.
Ma se apro il pdf, tra le proprietà del pdf reader riesco a vedere il percorso completo del server, ovvero http://archivio/documenti/33.pdf.
Se digito "a mano" nel browser tale indirizzo, senza eseguire l'autenticazione, il documento 33.pdf viene visualizzato senza problemi!

Come faccio ad evitare tale comportamento?
Un utente non troppo smaliziato riuscirebbe in un attimo ad aggirare l'autenticazione.
Io voglio che gli utenti NON conoscano il "vero" percorso server del documento. Ho provato con qualche settaggio su IIS, ma ad oggi non ho risolto nulla...

Help!

malatodihardware
22-03-2014, 07:40
Non conosco bene IIS, ma su apache dovresti utilizzare il file .htaccess prova a vedere se c'è anche per IIS..

Inviato dal mio Nexus 5 con Tapatalk

GTCstyle
23-03-2014, 15:51
Non conosco bene IIS, ma su apache dovresti utilizzare il file .htaccess prova a vedere se c'è anche per IIS..

Ciao

Sì in effetti esiste, grazie :) anche se non riguarda propriamente ASP classico ma ASP.NET, e si riesce comunque a sfruttare visto che IIS lo legge sempre: è il file web.config, da creare e copiare nella root della propria web application.

Il contenuto del file web.config trovato con Google che dovrebbe fare al caso mio è il seguente:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="test/download.asp" />
</authentication>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
<location path="myfolder/restricted">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>


La cartella da proteggere è la virtual path /myfolder/restricted.
Ho provato ma non funziona nella mia configurazione, IIS restituisce un errore:

Errore HTTP 500.19
Codice errore: 0x80070021
Errore di configurazione: Impossibile utilizzare la sezione di configurazione in questo percorso. L'errore si verifica quando la sezione è bloccata a livello padre. Il blocco avviene per impostazione predefinita (overrideModeDefault="Deny") o è impostato esplicitamente da un tag di percorso con overrideMode="Deny" o con il precedente allowOverride="false".

Non sono un esperto di IIS... qualcuno capisce cosa fare per risolvere questo problema?? :help:

Daniels118
24-03-2014, 07:40
Io ho realizzato una cosa del genere con apache+php, ma ti garantisco che si può fare anche su IIS, te lo spiego in linea di principio.
Prima di tutto devi bloccare l'accesso diretto ai file tramite la configurazione del web server.
Secondo, devi creare una pagina dinamica che, verificata l'autenticazione, produca come output il documento riservato; in questa pagina è importante modificare gli header http per far capire al browser che i dati non costituiscono codice html ma fanno parte di un file, in questo modo non vengono visualizzati nella pagina ma viene innescato un download. Naturalmente questa pagina potrà essere utilizzata per scaricare file diversi, pertanto ti conviene passare il nome del file come parametro tramite l'url.
Terzo, opzionale, puoi configurare il web server in modo da nascondere la pagina dinamica e far sembrare all'utente che punti direttamente al file; su apache questo meccanismo si chiama url rewrite, so che esiste qualcosa di analogo su IIS.