Newsgroup: it.comp.www.php
Titolo: file php linkabili

Salve a tutti
Ho un problema... le pagine .php mi vengono processate dall'interprete
PHP! Ok, lo so, nel 99% dei casi questo non è un problema (:-)) ma per
me può diventarlo.
Dunque: sto sviluppando un'applicazione che, tra le altre cose, prende
i file di un direttorio e li visualizza come un elenco in cui ciascuna
voce è linkata al file corrispondente. L'obiettivo è quello di dare
la possibilità all'utente di scaricare i file presenti nel direttorio
senza troppe difficolta'.
Dunque, se nella dir vado a mettere dei file .php lo scriptino tira
fuori:
    <a href="pagina/script.php">
        script.php
    </a>
Quando si clicca sul link generato, il file script.php viene processato
ed eseguito e questo potrebbe crearmi problemi perchè sono SICURO che
prima o poi uno degli utenti che utilizzera' il software mettera' nella
cartella un file php che mi ripulisce il database e poi se ne va in
loop infinito...
Avete qualche suggerimento? Sto sbagliando l'approccio?
Grazie
NB: naturalmente non se ne parla nemmeno di mettere mano alla
configurazione del server, visto che il programma deve essere
distribuito e utilizzato da utenti senza esperienza su chissa' quale
server.

 Avete qualche suggerimento? Sto sbagliando l'approccio?
Non permettere di fare l'upload di script eseguibili.
Disabilita il PHP a livello di quella directory tramite .h
access
Usa uno script intermedio invece di un link diretto che fa scaricare il
file invece di eseguirlo.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 file invece di eseguirlo.
Purtroppo i tuoi due primi suggerimenti non sono adatti al mio caso. 
L'upload avverra' con un semplice programma FTP e il software sarà 
distribuito a vari utenti (anzi, se me lo lasciano fare -visto che è un 
lavoro per la mia tesi di laurea- vorrei rilasciarlo come open-souce); 
quindi non so a priori se il server che ospitera' lo script sara' apache 
o chissa' cos'altro.
La terza via che mi hai indicato, invece, mi è stata d'aiuto.
Per ora ho risolto il problema un po' alla buona: faccio un controllo 
sul tipo di file che, nel caso risulti di "tipo php", viene stampato con 
i dovuti accorgimenti in una pagina web a parte invece di essere linkato.
Avevo trovato anche soluzioni piu' "tecniche" che sfruttano l'header 
"content-disposition"; mi sembra di capire però che tale modo di 
procedere crei qualche problema ad IE (vabbè, e' il contrario: IE crea 
problemi all'header), fino a che punto è vero? Le soluzioni che si 
trovano in giro, ovvero riconoscere i browser e per ciascuno usare 
script diversi, funzionano bene (io sono sempre diffidente verso questi 
tipi di hack)?
Un'altra mini domanda (riferito al mio modo di risolvere il problema): 
l'estensione dei file di tipo php "standard" è: php, php3, php4, 
phtml... ce ne sono delle altre (fermo restando che una qualsiasi 
estensione va bene se si riconfigura il server...ma vorrei poter 
riconoscere almeno quelle più diffuse)?
Grazie a tutti.
David

 riconoscere almeno quelle piů diffuse)?
Se hai problemi di diffusione anche su altri tipi di server allora
dovresti bloccare anche tante altre estensioni, tipo .asp, .jsp, .cfm,
.shtml
Altre al momento non mi vengono in mente, ma fai una ricerca approfondita...
-- 
Stéphane Bisinger
Webmas... well...

 
Acc! A questo non avevo proprio pensato!
Interessante (ahime')!
A questo punto (correggetemi se sbaglio): se devo poter gestire un sito 
che permette download di file inseriti dall'utente non serve a niente (o 
serve a poco) filtrare le estensioni, bloccare l'upload di script o 
utilizzare .htaccess (tanto è impossibile beccare tutte le estensioni 
eseguibili).
Rimane come soluzione usare il metodo con "content-disposition" su TUTTI 
i file scaricabili...
Forse questa soluzione e' vantaggiosa anche per un altro motivo (ma devo 
controllare...): gli utenti, soprattutto se non esperti, sono abituati a 
utilizzare nomi di file con accenti, parentesi e altri caratteri strani. 
La cosa mi ha dato un po' di problemi per il download diretto sia con FF 
che con IE. Magari con lo script di download risolvo anche questo problema.
Ma "content-disposition" è l'UNICO modo per gestire il download indiretto?
Se avete altri suggerimenti siete i benvenuti (ma gia' mi siete stati 
molto d'aiuto).
David

 Ma "content-disposition" č l'UNICO modo per gestire il download indiretto?


 esecuzione a quella directory dove vanno a finire gli upload?
Per favore, quota decentemente.
Leggi l'intero thread e capirai.
-- 
I am what I am, I do what I can


Avete qualche suggerimento?
Espando il suggerimento di Setec:
Non gli fare vedere la directory vera, e non gli fare vedere il nome vero,
e nella directory vera blocca l'accesso con .htaccess.
Per esempio, quando crei la directory "pippo", non creare la directory con
il nome "pippo" ma come md5($secret . "pippo"). Nella directory - oltre al
file .htaccess - metti un file dir.ini, contenente alcune info utili - fra
le quali il nome "fittizio" della directory.
Lo scriptino, nell'esempio sopra, tirera' fuori:
	<a href="dl.php?file=pagina/script.php">
		script.php
	</a>
Il file dl.php ricavera', da "pagina", il nome reale della directory - per
esempio 71bae3067700bd7bb9b9adb85fb03087 - e li' dentro cerchera' il file,
che si chiamera' fisicamente "script.php.txt".
(E qui c'e' la parte che penso tu non abbia implementato :-) )
A quel punto inviera' con Content-Type ecc., il contenuto del file, usando
readfile(). L'utente non ha modo di sapere dove sono davvero i suoi file o
come si chiamano, e anche se lo sapesse, .htaccess glieli blocca. Usi come
Content-Type qualcosa che forzi il download, e sei a posto.
In questo modo puoi uploadare quello che ti pare... ma non verra' eseguito
mai. Certo, il download tramite dl.php anziche' direttamente e' un tantino
piu' oneroso, ma... man tanstaafl(5) :-)
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio