ciao,
provo a spiegare più chiaramente, seguimi passo-passo. Il tuo web.config sembra ok. Qualsiasi file pdf e doc che si trovi all'interno di public/proibito non potrà più essere raggiunto né da utenti anonimi né da utenti loggati. E' bene che sia così, perché
non vogliamo che i file doc e pdf si possano scaricare conoscendone l'URL diretto.
- Verifica questo: apri il browser e digita l'url di un file pdf, come ad esempio http://tuosito/public/proibito/nomefile.pdf.
Che cosa succede? Dovrebbe avvenire una ridirezione a TEST/download.asp. Se è così, è corretto.
A questo punto, TEST/download.asp dovrebbe controllare se l'utente è loggato e, solo se lo è, servirgli il file per mezzo di ADODB.Stream (vedi
l'esempio).
E' sufficiente questo, non devi creare pagine aspx perché non servono.
plaff ha scritto:
A) non mi è chiaro come il web.config possa intercettare una sessione di login effettuata da asp classico.
Il web.config in questo caso ha un solo compito: vietare a
tutti, sia loggati che non loggati, l'accesso alla cartella public/proibito. Non può e non deve venire a conoscenza che esiste una sessione asp classico.
plaff ha scritto:
ho paura che sia necessario un intervento su server per estendere la protezione a file non aspx.
A questo può rispondere il test di cui ti parlavo qui sopra. Naviga su http://tuosito/public/proibito/nomefile.pdf. Se avviene una ridirezione verso TEST/download.asp. allora il tuo webserver è ok e non devi apportare modifiche.
A proposito, su quale versione di Windows Server /IIS sta girando la tua applicazione?
EDIT:
Affinché questa soluzione funzioni, è necessario che il tuo server abbia IIS 7 o superiore e che il sito giri in "
modalità Integrata", altrimenti, come dicevi tu, i file statici .pdf e .doc continueranno ad essere serviti al client, nonostante l'istruzione
deny. Inoltre devi aggiungere queste righe al tuo web.config, in modo che anche le richieste ai file statici passino per il runtime di Asp.Net.
<configuration>
...
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>
...
</configuration
Questa soluzione è la meno "invasiva", cioè è quella che non ti costringe a modificare il codice della tua applicazione asp classico.
Esistono due alternative:
- Sposti PDF e DOC all'interno della cartella /App_Data che è una cartella speciale di asp.net. Qualsiasi file contenuto lì dentro, di qualsiasi estensione, non verrà servito da IIS. Questo ti costringe a modificare il codice della tua applicazione asp classico: dovrai cambiare il percorso dell'upload dei files e ogni link a file statico dovrà invece diventare un link a download.asp, che si occuperà di servire il file al client.
- Associ le estensioni .doc e .pdf all'HttpForbiddenHandler e anche in questo caso dovrai modificare il codice ASP della tua applicazione affinché ogni link a file statico punti invece a download.asp.
ciao
Modificato da BrightSoul il 25 gennaio 2013 20.21 -