Visualizzazione risultati 1 fino 6 di 6

Discussione: download file.pdf situato in una cartella protetta

  1. #1
    Guest

    Question download file.pdf situato in una cartella protetta

    Buonasera,
    nel mio sito previsto che alcuni utenti possano registrarsi e successivamente, attraverso il file login.php (di seguito uno stralcio),


    Codice PHP:

    if (isset($_POST['Userid'])) {
    $loginUsername=$_POST['Userid'];
    $password=$_POST['Password'];
    $MM_fldUserAuthorization = "";
    $MM_redirectLoginSuccess = "../ElencoFatture/codicefiscale.PDF";
    $MM_redirectLoginFailed = "http://...../autenticazione-non-riuscita/";
    $MM_redirecttoReferrer = false;
    mysql_select_db($database_Connessione1, $Connessione1);

    $LoginRS__query=sprintf("SELECT Userid, Password FROM AAA_UtentiRegistrati WHERE Userid=%s AND Password=%s",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

    $LoginRS = mysql_query($LoginRS__query, $Connessione1) or die(mysql_error());
    $loginFoundUser = mysql_num_rows($LoginRS);
    if ($loginFoundUser) {
    $loginStrGroup = "";

    if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;

    if (isset($_SESSION['PrevUrl']) && false) {
    $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
    }
    header("Location: " . $MM_redirectLoginSuccess );
    }
    else {
    header("Location: ". $MM_redirectLoginFailed );
    }
    }
    ?>
    <?php include_once($_SERVER['DOCUMENT_ROOT'].'/'.'Connections/Connessione1.php');
    ?>
    accedere, in caso di autenticazione riuscita, al file "codicefiscale.pdf" situato nella cartella ElencoFatture e fin qui tutto bene.
    Successivamente, per evitare l'accesso diretto all'url del file, ho inserito nella cartella ElencoFatture il file .htaccess:

    <Files ~ ".+">
    Order allow,deny
    Deny from all
    Satisfy All
    </Files>

    e, per verificare se l'utente ha i permessi per accedere codicefiscale.pdf, il file accesso.php:

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    </head>

    <body>

    <?php

    if(isset($_SESSION['Password'])){

    $nome_file="codicefiscale.pdf";
    $dimensione_file="249kb";
    $percorso_assoluto="";

    header("Content-Type: application; name=".$nome_file);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$dimensione_file);
    header("Content-Disposition: inline; filename=".$nome_file);
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Cache-Control: private");
    header("Pragma: public");

    readfile($percorso_assoluto.$nome_file);

    }
    ?>
    <p>&nbsp;</p>
    </body>
    </html>
    .


    Nonostante l'autenticazione sia regolarmente effettuata non riesco a superare il blocco posto da htaccess e, inoltre, il file da visualizzare, dopo la regolare autenticazione, dovrebbe essere automaticamente individuato come codicefiscale.pdf (ove il codice fiscale è quello inserito dall'utente in fase di registrazione.

    Grazie per l'attenzione
    Ultima modifica di alemoppo : 20-11-2018 alle ore 00.48.15 Motivo: +tag

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Non puoi modificare l'header della pagina una volta eseguito l'output di codice html. Elimina ogni traccia di codice HTML.

    Dovrebbe essere sufficiente:
    Codice PHP:
    session_start();
    if(isset(
    $_SESSION['Password']))
    {
    $nome_file="codicefiscale.pdf";
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename= " . $nome_file);
    header("Content-Transfer-Encoding: binary");
    readfile($nome_file);
    }
    (ricorda anche la session_start() ogni volta che utilizzi le sessioni!).

    Ciao!
    Ultima modifica di alemoppo : 20-11-2018 alle ore 00.54.55

  3. #3
    Guest

    Predefinito

    Grazie Alemoppo per l'attenzione dedicatami.

    Ho riportato il codice php che mi hai suggerito ma, salvo errori, non funziona. Avrei tre domande da porti:
    - file login.php l'avvenuta autenticazione deve puntare al file codicefiscale.pdf oppure al file accesso.php?
    (comunque non funziona in entrambi i casi);
    - la $_SESSION['Password'] deve (ed eventualmente come) essere avviata anche nel file login.php? (v. codice php
    precedentemente allegato);
    - come definire il file codicefiscale.pdf in modo tale da aprire,, volta per volta, il file pdf corrispondente al
    codice fiscale inserito dall'utente che effettua il login?

    Grazie e buonanotte!

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Citazione Originalmente inviato da easyservice Visualizza messaggio
    - file login.php l'avvenuta autenticazione deve puntare al file codicefiscale.pdf oppure al file accesso.php?
    (comunque non funziona in entrambi i casi);
    Dipende, se vuoi che appena l'utente effettua il login parta il download, puoi puntarlo a accesso.php (non puoi accedere mai direttamente a codicefiscale.pdf, perché è appunto protetto da .htaccess e puoi leggerlo solo da php.
    Citazione Originalmente inviato da easyservice Visualizza messaggio
    - la $_SESSION['Password'] deve (ed eventualmente come) essere avviata anche nel file login.php? (v. codice php
    precedentemente allegato);
    Avevo tralasciato la parte di login vedendo problemi nell'altro file. In effetti le sessioni non sono consistenti, nel senso che nel login non viene memorizzata alcuna sessione $_SESSION['Password'], quindi poi in accesso.php è come se l'utente non fosse mai loggato.
    Quindi ti consiglierei prima di far funzionare questa parte, per poi passare al download.
    Io ti consiglio di rifare tutto il codice con le funzioni mysqli oppure PDO. Non utilizzare le vecchie funzioni mysql_ anche perché, oltre che insicure, non sono più supportate dalle nuove versioni di PHP.

    Citazione Originalmente inviato da easyservice Visualizza messaggio
    - come definire il file codicefiscale.pdf in modo tale da aprire,, volta per volta, il file pdf corrispondente al
    codice fiscale inserito dall'utente che effettua il login?
    Per ogni utente hai un pdf con il suo codice fiscale? Cosa contiene questo file a parte il codice fiscale? Io ti consiglierei di generarlo tramite PHP (esistono delle librerie per generare file pdf).

    Ciao!
    Ultima modifica di alemoppo : 21-11-2018 alle ore 11.42.36

  5. #5
    Guest

    Predefinito

    Ciao Alemoppo,
    ho provato ad attivare nel file login la $_SESSION['Password'] ma senza successo.
    Devo comunque "confessare" che non riesco a scrivere nemmeno una riga di codice: uso Dreamweaver 5.5 e temo di non poter seguire il tuo prezioso consiglio di utilizzare le funzioni mysqli.
    Il file codicefiscale.pdf rappresenta la fattura che ogni singolo cliente dovrebbe visualizzare utilizzando come discriminante il campo codice fiscale memorizzato nel database.
    Grazie

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,683

    Predefinito

    Se non sai scrivere codice ti sarà molto difficile fare il tutto quel che vorresti. Nel forum c'è qualche codice di codice login già fatto, ma ovviamente prendendo pezzi qua e là è difficile che siano compatibili tra loro. Il tuo codice comunque utilizza funzioni molto vecchie che non andrebbero più utilizzate.

    Ciao!

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
  •