Visualizzazione risultati 1 fino 15 di 15

Discussione: Gestire autorizzazioni dell'accesso file del sito

  1. #1
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito Gestire autorizzazioni dell'accesso file del sito

    Sto realizzando un'area riservata gestita tramite sessioni. Un database detiene una cartella utenti con i vari attributi. Ad ogni utente è associato uno o più file pdf e solo l'utente corrispondente può accedervi (evitando l'accesso diretto al file).
    Ad una domanda simile, precedentemente posta sul forum mi risposero mediante il file .htacces. Io ho preso un pò di tempo per documentarmi ed ora:
    1. Ho capito la funzionalità di tale file ma non le direttive in quanto online si trovano esempi ma non riesco a capire il significato del codice per adattarlo alle mie esigenze.
    2. Da quello che ho capito utilizzando tale metodologia, per ogni file è necessario specificare nuove regole. Se all'utente pippo devo aggiungere un suo documento, devo modificare nuovamente il file htacces.
    Non vi è un altro metodo? Oppure ho capito male io il funzionamento del file htacces?

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Un metodo alternativo consiste nell'utilizzare una pagina PHP che agisca come proxy per i file PDF: questa pagina riceve la richiesta di un file (ad esempio tramite GET), controlla che l'utente sia correttamente autenticato e abbia accesso al file; in caso positivo mostra il contenuto del file all'utente, altrimenti un messaggio d'errore o ciò che più riterrai opportuno.
    L'accesso diretto ai file PDF è bloccato tramite htaccess (è sufficiente una sola regola), in modo che questi siano accessibili solo tramite la pagina PHP.

  3. #3
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Davvero un'ottima soluzione.
    Cercando in rete ho trovato anche questo codice relativo al file .access che credo faccia al mio caso:
    Codice:
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !(www.)?sito.it/area_riservata/utente.php
    RewriteRule .* - [F]
    Ma il file .htaccess creato con tali regole deve stare all'interno della cartella contenente i file da proteggere vero?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Ma il file .htaccess creato con tali regole deve stare all'interno della cartella contenente i file da proteggere vero?
    In generale, sì, un file htaccess ha effetto nella cartella in cui si trova.

  5. #5
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Però vi è un problema:
    in questo modo un utente può accedere ai documenti di tutti gli altri utenti.

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    No:
    questa pagina [...] controlla che l'utente sia correttamente autenticato e abbia accesso al file
    il controllo sulla possibilità di accedere al file potrebbe avvenire, per esempio, interrogando una base di dati in cui, per ogni file, ne viene memorizzato il proprietario.

  7. #7
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Una cosa non ho capito:
    come avviene l'indirizzamento dalla pagina "jolly"?,
    tramite un collegamento (tag <a>)??

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sì, se scegli di passare l'informazione sule file da recuperare tramite GET, puoi usare indirizzi in una forma simile a: sito.altervista.org/pdf_proxy.php?file=miofile.pdf.

  9. #9
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Però basterebbe che uno qualsiasi aggiunga un tag <a> da ispeziona e il gioco è fatto..

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non direi: per quanti URL un attaccante possa indovinare, il controllo sul diritto di accesso alla risorsa viene effettuato dal server basandosi sulla sessione attiva.

  11. #11
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Io con la sessione ricavo l'user, verifico i suoi file dal database e dopo tramite echo stampo:
    Codice:
    <a href="documenti/utente_a.pdf">Documento a</a>
    (logicamente il percorso sarà una variabile ricavata dal db) e così via per tutti i suoi file.
    però se l'utente, per non so quale motivo, sa che esiste un file (utente_b.pdf) potrebbe aggiungerlo tramite ispeziona dal browser:
    Codice:
    <a href="documenti/utente_b.pdf">Documento a</a>
    Non ho capito l'ultimo post...
    Grazie mille per la collaborazione.

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Io con la sessione ricavo l'user, verifico i suoi file dal database e dopo tramite echo stampo:
    Codice:
    <a href="documenti/utente_a.pdf">Documento a</a>
    (logicamente il percorso sarà una variabile ricavata dal db) e così via per tutti i suoi file.
    Così facendo non sai usando la pagina proxy, stai mostrando il collegamento diretto al documento (che non dovrebbe essere raggiungibile, nemmeno per il proprietario). Il codice sarebbe piuttosto qualcosa come:
    Codice HTML:
    <a href="documenti/proxy.php?document=utente_a.pdf">Documento a</a>
    Sarà la pagina proxy a verificare che l'utente abbia il permesso accedere al file.

    proxy.php(n pseudocodice):
    Codice PHP:
    <?php
    $documento_richiesto
    = $_GET['dcoument'];
    $utente_corrente = $_SESSION['user_id'];

    // Se l'utente ha diritto di accesso sul documento, gli viene mostrato
    if (has_access($utente_corrente, $documento_richiesto)) {
    header('Content-type: pdf...');
    echo
    file_get_contents(...);
    }

    // Se l'utente non ha il diritto di accesso al documento, un messaggio d'errore gli viene mostrato
    else {
    echo
    "Errore: questo utente non può accedere al file richiesto";
    }
    ?>
    dove il predicato has_access indica se l'utente può accedere al documento. Puoi realizzarla tramite interrogazione al database, per esempio.

    In questo modo, usando un URL forgiato o contraffatto, la pagina proxy impedisce la visualizzazione del documento.

  13. #13
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    La parte html e php sono nella stessa pagina?

  14. #14
    SchoolCommunity non è connesso Utente giovane
    Data registrazione
    30-05-2015
    Messaggi
    46

    Predefinito

    Io ho fatto una pagina in cui tramite intterrogazione al db mostro tutti i file che egli può vedere;
    FILE 1:
    Codice:
    	
    while($documenti=mysql_fetch_array($query))
    {
    	$tipo=$documenti['tipologia'];	//titolo
    	$nome_file=$documenti['nome'].$_SESSION['user'];
    	echo "<a  href='proxy.php?documento=$nome_file&id=$id' target='_blank'>$tipo</a>";
    }
    FILE 2 (proxy):
    Codice:
    <?php
    session_start();
    if(isset($_SESSION['user']) && isset($_SESSION['psw']))
    {
      //..connessione al database, effettuata query se da un risultato allora egli potra vedere il file:
      if(mysql_num_rows($query)>0)
      {
       header("Location: documentazione/$nome_file");
      }		
    }
    Una volta che clicca sul link del file manda al proxy php il nome ed il suo id utente, faccio la verifica sulle autorizzazione e successivamente cambio l'header.
    Però lavorando con l'header non me lo permette (mi dice che non sono autorizzato), se facessi un semplice collegamento invece si (facendo un echo <a> lincando al file dal proxy).
    Come posso fare?
    Perchè non funziona con header???

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    La parte html e php sono nella stessa pagina?
    proxy.php è una pagina a se stante, sul resto hai libertà di scelta.

    Però lavorando con l'header non me lo permette (mi dice che non sono autorizzato), se facessi un semplice collegamento invece si (facendo un echo <a> lincando al file dal proxy).
    Quello che stai descrivendo è un reindirizzamento, è giusto che non funzioni; anzi, è strano -e sbagliato- che stampando un link con <a> sia possibile accedere al file, vuol dire che htaccess non è impostato correttamente.
    Un proxy funziona diversamente, non deve reindirizzare alla risorsa, né tanto meno mostrare un link, ma diventare esso stesso la risorsa. In termini più concreti, la pagina proxy.php?nome_file=file.pdf è a tutti gli effetti un file PDF, non una pagina HTML che reindirizza.
    Il punto è usare PHP per effettuare i controlli sul diritto di accesso prima di generare il PDF. Mi sembra che i controlli tu li abbia già realizzati, per mostrare il PDF occorre impostare lo header Content-type, leggere e stampare il contenuto del file:
    Codice PHP:
    ...
    header('Content-Type: application/pdf');
    readfile("percorso-del-file" . $nome_file);
    (readfile legge il contenuto di un file e lo stampa)

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •