30 messaggi dal 27 marzo 2002
Buongiorno a tutti

Spero di scrivere nel forum giusto.
Premetto che sono digiuno di ASP.NET.

Mi e' stato chiesto di aggiornare un sito sviluppato interamente in ASP classic. L'esigenza nell'immediato e' quella di proteggere da accessi esterni una cartella nella quale vengono effettuati upload (pdf, doc ecc) da parte degli utenti registrati.

Trattandosi di un server windows naturalmente ho pensato di usare il metodo web.config di ASP.NET che pero', da quel che ho capito, necessita che anche la login venga effettuata in ASP.NET.
Ammesso che possano convivere i due linguaggi; esiste un modo, in web.config, per recuperare la sessione di login di ASPClassic in modo da bypassare questo?

Grazie
Luca
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

plaff ha scritto:

recuperare la sessione di login di ASPClassic in modo da bypassare questo?

Asp classico e Asp.Net possono convivere nello stesso sito ma penso che non ti serva recuperare la sessione di asp.net. Vediamo se si riesce a risolvere in un altro modo più semplice.

Dimmi se questo può andar bene: per prima cosa metti in sicurezza la cartella che contiene gli uploads e questo lo puoi fare come hai suggerito tu, dal web.config
<configuration>
  <location path="cartellaUploads">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

Quella particolare direttiva deny farà in modo che nessun utente sia mai in grado di accedere a quella cartella.
Se qualcuno dovesse provarci, verrebbe reindirizzato alla pagina di login che pure puoi indicare nel web.config
<configuration>
<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/download.asp" />
    </authentication>
</system.web>
  <location...>...</location><!-- qui va il nodo location di prima -->
</configuration>

Vedi che ho indicato il percorso di download.asp, una nuova pagina in asp classico che dovrai creare. Questa pagina riceverà in querystring l'url del file a cui si era tentato di accedere.
A questo punto il problema risolto, perché dentro download.asp potrai controllare se l'utente è loggato o meno.
  • Se l'utente non era loggato, reindirizzalo alla tua pagina di login
  • Se invece era loggato, allora ha diritto ad accedere al file. Recupera il suo percorso dalla querystring (verifica ovviamente che si tratti di un file contenuto in cartellaUploads) e poi inviaglielo con questo sistema.
    http://www.aspitalia.com/script/524/Download-Sicuro-Files-ASP.aspx


ciao
Modificato da BrightSoul il 16 gennaio 2013 22.26 -

Enjoy learning and just keep making
30 messaggi dal 27 marzo 2002
Mi scuso per il ritardo ma ero impegnato su altri fronti e ho visto la risposta solo oggi.

Prima di tutto grazie BrightSoul per la risposta.

Ho preparato un web.config così:
<configuration>
<system.web>
    <authentication mode="Forms">
      <forms loginUrl="TEST/download.asp" />
    </authentication>
</system.web>
  <location path="public/proibito">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

-------------------
In questa parte forzo il ritorno ad una pagina asp che, se loggato, avvia il codice di scaricamento (recuperando il file dalla QS ReturnUrl che mi procura il web.config) oppure "se estraneo" mi riporta alla pagina di login VERA via asp classic. Giusto?
    <authentication mode="Forms">
      <forms loginUrl="TEST/download.asp" /> 
    </authentication>


Il problema è:
1) mi butta fuori solo se cerco di aprire file aspx (ne ho messo uno per provare)
2) anche se loggato il punto 1) non lo apre comunque
3) I file da scaricare, previa login, sono prevalentemente .pdf e .doc e questi come le pagine asp classic vengono aperti/downlodati in qualsiasi modo.

Alla luce di tutto questo:
A) non mi è chiaro come il web.config possa intercettare una sessione di login effettuata da asp classico.
B) ho paura che sia necessario un intervento su server per estendere la protezione a file non aspx.

Grazie

P.S. in passato avevo tentato (senza troppa convinzione) con questo:
http://www.aspitalia.com/articoli/immaginiprotette.aspx
senza tuttavia capire come si potesse accedere ad una cartella protetta in lettura(scrittura) senza credenziali FTP...
11.886 messaggi dal 09 febbraio 2002
Contributi
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 -

Enjoy learning and just keep making
30 messaggi dal 27 marzo 2002
Ciao
Effettivamente ho fatto come dicevi:
la pagina di download è protetta da sessione asp classic, sarà poi lei a concedermi il download se autenticato.

Avevo anche tentato di scaricare direttamente un file PDF (di fatto lo scopo principe è proprio di evitare ciò)
www.miosito.it/public/proibito/AAtest.pdf
ma con il web.config settato come segnalato, il file è rimasto raggiungibile comunque, per questo ho messo:

"B) ho paura che sia necessario un intervento sul server per estendere la protezione a file non aspx."

Avendo letto che il web.config normalmente blocca solo file aspx, per verificare che, comunque, fosse impostato correttamente ho creato una pagina con quella estensione e infatti se tento di aprila vengo buttato fuori.

Il sito è su Aruba e non è ne housing ne "server dedicato" quindi per i settaggi extra è inaccessibile. Credo che comunque siano tutti IIS7 ed evidentemente non in modalità integrata.



Però ho testato la soluzione app_data e funziona.

Per i link non ci sarebbe problema perché, per i file in questione, era già impostato che scaricasse da una pagina come la "download", quindi mi basta cambiare il percorso e il gioco è fatto. La pagina di upload è una sola... direi che è la soluzione ideale!

La cosa che mi chiedo: non ci sono controindicazioni per l'uso di questa cartella?
Dato che sono file caricati dagli utenti, il numero dei file potrebbe arrivare a diverse centinaia, forse migliaia. (l'upload comunque è limitato alle estensioni PDF, DOC, DOCX, RTF e stop).

GRAZIE INFINITE per il tempo e la pazienza che mi hai dedicato.

Luca
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego!

plaff ha scritto:

era già impostato che scaricasse da una pagina come la "download", quindi mi basta cambiare il percorso e il gioco è fatto

ah, benissimo, così sei riuscito a risolvere velocemente.



plaff ha scritto:

per i settaggi extra è inaccessibile

ok, se in futuro ti dovesse servire, sappi che il file di configurazione di un sito in IIS7 è il web.config. Attraverso il suo nodo system.webServer puoi fare svariate cose che fino alla versione 6 erano possibili solo accedendo materialmente alla console di IIS.
Certo, il fornitore (Aruba) può scegliere di bloccare una o più sottosezioni del system.webServer quindi ciò che puoi realmente fare può variare da caso a caso.

plaff ha scritto:

il numero dei file potrebbe arrivare a diverse centinaia, forse migliaia

Qualche migliaio di file non dovrebbero essere un problema, direi di rimandare la questione a se e quando inizierai a sperimentare un po' di lentezza prima che il download abbia inizio.
Anche se arrivassi ad avere varie migliaia di files, non sarà difficile organizzarli in sottocartelle. A volte si usano le prime lettere dei nomi dei file per nominare le cartelle, ma in questo momento mi sembra una complicanza inutile, ricorda il principio YAGNI.

ciao & buon weekend!
Modificato da BrightSoul il 25 gennaio 2013 22.52 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.