Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Impedire accesso diretto a file (non PHP)

    Ho visto che è possibile impedire l'accesso ad una pagine tramite le sessioni ed una IF...
    Vorrei sapere se in qualche altro modo è possibile impedire l'accesso diretto ai file del sito... ad esempio se io digito:
    http://forum.html.it/images/logo.png
    arrivo al file png, c'è un modo per impedirmi di accedere a questo file anche digitando l'indirizzo completo??

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Hai due opzioni:

    1. usi .htaccess per proteggere la cartella e i file. Il problema,dal mio punto di vista, è che gli utenti che possono accedere al file vanno gestiti tramite apache (il file .htpassword): Se registri gli utenti su un db, devi poi prevedere un sistema per aggiungerli al file della password di apache. Quindi te lo consiglierei se hai degli utenti "statici"

    2. sposti i tuoi contenuti da proteggere fuori dalla root del sito, in una cartella cmq leggibile e scrivibile da php (in alternativa puoi ricorrere a .htaccess, punto 1, negando l'accesso a tutti).
    A questo punto nessuno può accedere ai file, quindi ti prepari uno script php del tipo

    readimg.php
    Codice PHP:
    <?php
    session_start
    ();
    $file $_GET['src'];
    // Verifico se l'utente è loggato. Chiaramente puoi creare il tuo sistema di accesso, usando 
    // anche il db
    if(!isset($_SESSION['user'])){
          
    header("HTTP/1.0 403 Forbidden");
          ....
          exit();
    }  
    $file_path $path_assoluto_cartella.$file;
    if(!
    file_exists($file_path)){
         
    header("HTTP/1.0 404 Not Found");
         ...
         exit();
    }

    // Come content-type, sarebbe meglio prendere il MIME del file
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' filesize($file_path));

    readfile($file_path);

    ?>
    quindi se vuoi far visualizzare l'immagine basta fare

    Codice PHP:
    [img]/path/readimg.php?src=logo.png[/img
    Se l'utente è abilitato ed il file esiste nella cartella privata allora verrà visualizzato

  3. #3
    Ottimo, sembra ciò che fa per me... ed avrò anche la possibilità di usare per la prima volta il file .htaccess



    ...
    Sto facendo delle prove, ho dichiarato la variante/costante "$path_assoluto_cartella" in questo modo:
    codice:
    $path_assoluto_cartella = '../privatefile/';
    Ho aggiunto
    codice:
    echo '[img]read.php?src=img.png[/img]';
    nella condizione che verifica se il file esiste...

    Tutto il resto l'ho lasciato più o meno invariato..

    Ma quando vado al percorso www.sito.com/privatefile/read.php?src=img.png
    mi scarica un file nominandolo read.php che in realtà è "img.png"


    Cosa ho sbagliato?

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.