Visualizzazione risultati 1 fino 9 di 9

Discussione: Far scaricare file *.php [era: Files .php]

  1. #1
    Guest

    Predefinito Far scaricare file *.php [era: Files .php]

    Non so bene se questa è la sezione giusta, scusatemi se ho sbagliato.
    Io, nel mio sito, vorrei dare agli utenti la possibilità di scaricare file .php originali, completi del sorgente, senza che quest'ultimo venga interpretato.
    Sto infatti pensando di rinnovare il mio sito trasformandolo in un sito di php-scripting, con esempi pratici.
    Ho visto che voi dello staff di AlterVista avete ottenuto un risultato simile a quello che voglio ottenere io con il file dl.pl.
    Potreste aiutarmi, visto che di Perl ne so un po' poco, e dirmi come avete fatto?
    Saluti.

    FunCool: Ho modificato il titolo e sposto in Livello 3.
    Ultima modifica di funcool : 25-09-2006 alle ore 10.29.37

  2. #2
    L'avatar di phpone
    phpone non è connesso AlterGuru
    Data registrazione
    05-09-2005
    Residenza
    Roma
    Messaggi
    1,217

    Predefinito

    di perl non se ne puo' usare (non e' disponibile su altervista)
    per scaricare i file php basta che li uppi sul server con una estensione diversa a php (magari li chiami .phps)

  3. #3
    Guest

    Predefinito

    Potresti creare uno script che fornisce il sorgente, qualcosa del tipo
    Codice PHP:
    <?php
    if(isset($_GET['file'])){
    if(!
    is_file($_GET['file'])){
    header('Location: index.php');
    }else{
    $source = implode('', file($_GET['file']);
    header("Content-type: text/plain");
    echo
    $source;
    }
    }else{
    header('Location: index.php');
    }
    ?>
    Potresti addirittura evidenziare la sintassi del php, così:
    Codice PHP:
    <?php
    if(isset($_GET['file'])){
    if(!
    is_file($_GET['file'])){
    header('Location: index.php');
    }else{
    highlight_file($_GET['file']);
    }
    }else{
    header('Location: index.php');
    }
    ?>

  4. #4
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    tuttoeneinte2:
    ho l'impressione che il primo script sia drammaticamente infelice, ovvero una backdoor per sapere il codice di TUTTO il sito (eventuali password incluse) o sbaglio?
    se per es. vedono che ad un certo percorso è installato un CMS o un forum noto, passando parametri tipo:
    ?file=../../../nomecms/config.php (tanto per dire)

    occhi malandrini potrebbero leggersi tutto il codice che gli pare.
    Restringerei il controllo.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  5. #5
    Guest

    Predefinito

    @heraclemum: Hai perfettamente ragione e ci avevo pensato anch'io quando ho scritto il codice, ma quando ho letto
    Io, nel mio sito, vorrei dare agli utenti la possibilità di scaricare file .php originali, completi del sorgente, senza che quest'ultimo venga interpretato.
    ho dato per scontato che se voleva dare questa possibilità non avesse nessun dato sensibile memorizzato nei php.

    La cosa più semplice per risolvere il problema di sicurezza secondo me è aggiungere un prefisso a tutti i file "visibili", tipo file_, che impedisce di salire di directory (file_../ non esiste) e blocca le remote file inclusions, in caso di un sito fuori AV che possa includere file esterni. Oppure si può ricorrere ad un array di file autorizzati o altro, basta avere più informazioni a riguardo.

  6. #6
    Guest

    Predefinito

    Ma non fa prima a zippare le pagine e metterci un link?


    ciao!

  7. #7
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Beh in effetti... è la soluzione più pratica e sbrigativa, ma forse "troppo spartana" per le esigenze di Hmetal.

    Oppure mettere i sorgenti in una apposita cartella "sorgenti" (per dire), con estensione .txt
    Lo script che restituisce il file php accetta come parametro nomi di file (o eventuali sottocartelle) SENZA estensione, tipo "subdir/ciccio" e lo script va ad aprire il file al percorso "/sorgenti/subdir/ciccio.txt"
    Poi al limite, se si pensa che non sia sufficiente si eliminano le occorrenze di "../" nel parametro, ma già il fatto che cerchi nel filesystem locale espressamente file .txt non può nuocere.
    Alla fine prima di restituire il contenuto del file puoi impostare come si chiamerà il nome del file che si scarica, e gli indichi lo stesso nome di file ma con estensione .php in questo modo neanche si accorge che il file sorgente era un txt. Aggiungi:
    Codice PHP:
    header("Content-Disposition: attachment; filename=$nomefile.txt");
    Dove la variabile $nomefile è ovviamente il nome del file passato, senza eventuali sottocartelle però.
    Questo forza il download del file, altrimenti il browser l'avrebbe mostrato al suo interno il codice.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  8. #8
    Guest

    Predefinito

    Grazie a tutti, siete stati veramente esaurienti...
    Ma per esempio, con uno script in perl come il vostro del sito, non c'è pericolo che qualcuno sfrutti il codice per scaricare sorgenti abusivamente?

  9. #9
    Guest

    Predefinito

    Non penso, lo script è fatto in modo da leggere i file SOLO dell'account per cui si è loggati e SOLO se si è loggati.

Regole di scrittura

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