Newsgroup: it.comp.www.php
Titolo: collegamento nascosto

Salve, vorrei fare in modo che quando un utente clicca su un link di un file
da scaricare non vedesse il path assoluto del file (cioč, non vedesse dove
si trovano le cartelle in cui risiedono i file).
Da dove parto?
Grazie


parti dal manuale alla funzione readfile. Nascondi i tuoi file in una
cartella non accessibile da web e li fai mandare in output da uno script
php.
Ludovico


Grazie, ma ho bisogno altre info. Devo generare i link in maniera dinamica e
cliccandoci sopra devo scaricare il file. Con readfile me lo stampa nella
pagina ma io devo farlo scaricare o cmq aprire (sono file doc, zip, ecc..).
Mi sapresti dare altre dritte?
Grazie

 php.
Ti dispiace dire a me, invece, da dove partire per rendere una cartella
non accessibile dal web? Ho dato uno sguardo alle funzioni relative alle
directory senza trovare materiale utile; per il momento tutto ciň che mi
sembra possa impedire l'accesso a una cartella sono i permessi: andando
per tentativi, ho notato che chmod($dir, 0000) la rende "impenetrabile".
TIA
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)

 Mi sapresti dare altre dritte?
E' una cosa che avevo già detto qualche post fa:
Ci dovrà essere un file .php che si occuperà di far scaricare i file
chiamiamolo "download.php" (che fantasia, eh!)
A questo file diciamo che passi il nome del file
download.php?file=eseguibile.exe
lo script sa che nella cartella "files/scaricabili/" ci sono i file da
scaricare.
dovrà quindi far finta di essere lui stesso un file di quel tipo mandando le
giuste intestazioni con la funzione header, quindi dire anche che è un
allegato, quindi mandare il contenuto del file con readfile.
IMPORTANTISSIMO: Ovviamente dovrai controllare cosa stai facendo scaricare,
altrimenti avrai grossi guai di sicurezza. Come minimo devi controllare il
nome di file passato per evitare che ci siano riferimenti ad altre cartelle
("../../../../../etc/passwd" e simili)
Ad ogni modo avresti dovuto dare uno sguardo al manuale alla funzione
readfile, dove avresti trovato alcune delle cose che ti ho detto. Copio dal
primo commento
http://it.php.net/manual/en/function.readfile.php
<?php
$file = "
file-to-download.xyz
";
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($file));
@readfile($file);
?>
Ludovico
e tanti altri simili.

 TIA
L'argomento può diventare vasto, cercherò di essere breve e confuso ehhmm...
conciso.
Con i permessi sui file puoi impostare lettura, scrittura ed esecuzione del
file.
Un discorso simile si applica alle cartelle, dove però il permesso
"d'esecuzione" assume un significato particolare.
Ogni permesso (sempre parlando di linux) riguarda "il proprietario", "il
gruppo" e "gli altri", in quest'ordine.
Quindi il permesso "0753" significa (dimenticati il primo 0 per ora e per
ancora un po')
7 per il proprietario
5 per il gruppo
3 per gli altri.
Ma che significano??
1: esecuzione
2: scrittura
4: lettura.
Sommandoli ottieni tutti i valori, dal minimo (0=nessun permesso) al massimo
(7, lettura+scrittura+esecuzione)
Ora è importante capire chi è il proprietario e chi il gruppo per sapere
come dare i permessi. Ricordati che apache viene eseguito sotto i permessi
di un determinato utente (web, apache, nobody... devi controllarlo), per cui
se il proprietario del file è "ciccio" e apache gira come "apache" (e
supponendo che non stiano nello stesso gruppo), ci deve essere almeno il
permesso in esecuzione per "gli altri", l'ultimo dei numeri, per poter far
leggere un file ad apache.
Non credo tuttavia che con i soli permessi puoi ottenere quello che ti
serve.
Apache permette l'utilizzo di alcuni file chiamati ".htaccess" (nota il
punto davanti) che possono contenere alcune delle direttive di
configurazione per quella cartella e quelle in essa comprese.
Un tipico file .htaccess che vincola l'autenticazione per una cartella è
AuthName "Zona protetta da password"
AuthType Basic
AuthUserFile /percorso/del/file/che/contiene/le/password
require valid-user
Sotto linux vedi il manuale di htpasswd (man htpasswd) per altre
informazioni. Con questi file potresti proteggere la cartella dal download
diretto (così nessuno può scaricare il file
http://www.sito.it/download/file.exe
) perchè hai protetto la cartella
download, eppure puoi continuare a far scaricare i file tramite la pagina
http://www.sito.it/download.php
 che leggerà i file nella cartella protetta
(protetta solo via http, non per il php)
Un modo ancora più ovvio di procedere è quello di avere una situazione
simile a questa:
root del sito
/opt/www/htdocs/
sito.it/
cartella con i file da scaricare
/opt/www/htdocs/download
in questo modo accedendo a 
www.sito.it
.. non sarà possibile in nessun modo
acecdere alla cartella download, ma allo stesso modo sarà possibile leggere
i file con uno script php in quella cartella.
Attento però a controllare che l'include path del php comprenda anche la
cartella con i file da scaricare o una sua superiore, altrimenti non potrai
accedervi.
In ogni caso, in mano il manuale, error reporting a E_ALL e buon
divertimento
Ludovico

 conciso.
Post da incorniciare, lo dico senza piaggeria alcuna. 
Grazie infinite :)


 conciso.
Solo a titolo di cronaca, mi auguro ti faccia piacere saperlo: stasera
ho avuto tempo di rileggere con calma, chiarirmi un paio di punti, e
passare all'azione. Ebbene, funziona tutto *perfettamente*, non ho altro
da dire. 
Evito ulteriori ringraziamenti, alla prossima :)


 da dire.
Mi fa un piacere immenso =)
Ludovico

 leggere un file ad apache.
"permesso in lettura", non in esecuzione
Ludovico