Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Protezione Cartelle

  1. #1

    Protezione Cartelle

    Salve a tutti,
    volevo chiedervi come (e se) era possibile proteggere delle cartelle create all'interno della cartella Public.

    Da programma ho dato la possibilita' all'utente di creare cartelle e sottocartelle all'interno della cartella Public e di fare l'uploadare di documenti. Sia le cartelle che i documenti sono accessibili solo a seconda dell'utente loggato e del "livello" ad esso assegnato. Per esempio l'utente X con livello LIV1 vedra' tutti e solo i doc "marcati" con livello di sicurezza LIV1.

    Fin qui tutto ok perche' gestisco la cosa da DB e quindi da codice rendo visibili solo i documenti relativi all'utente loggato.

    Il problema adesso e' questo: quando l'utente visualizza la lista dei doc a lui accessibili puo' cliccarci sopra e vederli. In pratica ad ogni elemento della lista e' semplicemente associato il link all'interno della cartella dove risiede. Ad esempio:

    ../public/miacartella/miofile.doc

    Adesso, se io copio questo link e lo riscrivo in una nuova finestra del browser il documento risulta comunque accessibile, alla faccia di tutti i livellidi sicurezza che ho creato per proteggerne la visualizzazione.

    Quindi mi chiedo come sia possibile ovviare a questo. Cioe' se si puo' in qualche modo proteggere da accesso esterno le varie cartelle create dentro la cartella Public.

    Spero di avervi fatto capire il mio problema.. sob...


    Grazie a tutti.
    igor
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  2. #2
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    secondo me. sbagli approccio.
    I link non dovrebbero riportare il collegamento diretto al file system.
    Tale collegamento dovrebbe essere salvato nel db.

    Quando un utente clicca tu recuperi dal db il percorso fisico e con un bello stream redirezioni il flusso verso il client che ti fà la richiesta.

    Una cosa di questo tipo:

    string fileSystemName = "recuperi il percorso da db";
    string docName = "recuperi il nome del documento da db";

    Response.Clear();
    Response.ContentType = "application/octect-stream";
    Response.AddHeader("Content-disposition", "attachment; filename=\"" + docName + "\"");
    Response.Flush();
    Response.WriteFile(fileSystemName);

    Ovviamento IMHO.

    Ciao.
    PS : Alternativa sarebbe salvare il documento in un campo BLOB del db, con pro e contro.
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  3. #3
    interessante soluzione, non ci avevo pensato.
    Anche io mi trovavo in una soluzione analoga e avevo pensato di mettere tutti i file in cartelle con nomi casuali ed eventualmente variabili per complicare le cose e "nascondere" i file.

    Avevo anche pensato di scrivere i file interamente nel DB, ma mi sembrava troppo oneroso.

    Un'altra idea che avevo era quella di sfruttare in qualche modo l'autenticazione di windows. In pratica l'utente che naviga un sito viene riconosciuto solitamente come IUSR_utente o qualcosa del genere. Si poteva pensare di creare un altro utente con permessi diversi che i qualche modo potesse corrispondere all'utente LOGGATO eventualemtne con classe Membership.
    Ma non sapevo come implementare la cosa.

    La tua soluzione sembra ottima. Veloce e funzionale.
    =MaRk0n3=


  4. #4
    Ciao evil,
    intanto grazie infinite per la tua gentile risposta. Dunque quello che tu mi consigli di fare e' quello che effettivamente faccio (almeno mi sembra!), ovvero io memorizzo nel DB due campi: uno per il "path" del file (percorso completo della cartella dove risiede) e uno per il "nome" del file stesso.

    Quando leggo da DB poi "ricompongo" il percorso completo del file (path+nome) e lo richiamo con una istruzione del tipo:

    Response.Redirect(path+nome);

    Ma il problema cosi' facendo e' che quando si esegue il redirect al link indicato, si puo' leggere il link stesso... e quindi avere "indizi" di dove si trova fisicamente il file (ne senso che, se faccio copia e incolla del link che vedo, posso tranquillamente rileggere il file senza permessi ecc.).

    Adesso, sinceramente, non so se il problema e' nell'istruzione Response.Redirect. Tu mi indichi un condice differente (sempre con il Response ma non il Redirect), quindi magari sta li l'inghippo. Ho provato ad usare il tuo codice ma mi da qualche errore, devo vedere come modificarlo per i miei scopi.

    Magari ti faccio sapere se funziona!

    Grazie ancora.

    Ciao.
    Igor
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  5. #5
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    Response.Redirect è molto diverso da Response.WriteFile(fileSystemName);

    Infatti nel primo caso quello che fai è proprio ridirezionare il client su un determinato link (e tutti i problemi che ne conseguono), nel secondo caso invece scrivi lo stream del file sullo stream di risposta della richiesta HTTP.
    Dunque quello che ti comparirà sara un bella finestra di IE (o altro browser) che ti invita a salvare o aprire il file.

    Il codice non l'ho testato ma ti assicuro che grosso modo è quello.
    Devi giusto ritoccarlo per farlo funzionare nel tuo caso.

    Ciao!
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  6. #6
    Ho capito, cosi' e' proprio quello che mi serve

    Pero' modificando il codice e adattandolo ottengo questo errore:

    "Access to the path is denied"

    Secondo te da cosa puo' dipendere? Tieni conto che con il semplice Redirect l'accesso negato non me lo dava e potevo visualizzare il file tranquillamente ...
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  7. #7
    Utente di HTML.it L'avatar di evil80
    Registrato dal
    May 2001
    Messaggi
    321
    che permessi hai attivato sulla cartella ?
    Secondo alcuni autorevoli testi di tecnica di aeronautica, il calabrone non può volare, a causa della forma e del peso del proprio corpo in rapporto alla superficie alare.
    Ma il calabrone non lo sa e perciò continua a volare.
    Igor Sikorsky

  8. #8
    bellissimo! proprio quello che stavo cercando...
    ma se per esempio volessi aprire uno streming su un file che per ragioni di spazio si trova su un altro server di cui ho solo quindi il percorso web e non quello fisico?

    Si puo' fare secondo voi?

    e come posso garantire che i file siano aperti solo da richieste provenienti dalla mia applicazione?

    grazie e ciao
    http://www.dammnet.it
    http://www.nautica-bozzato.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.