Newsgroup: it.comp.lang.perl
Titolo: SETTAGGIO CHMOD

Sapete come si setta il CHMOD (quindi qual'è il numero) per rendere
l'accesso ad un file possibile solo quando si ha un collegamento  ad esso in
una pagina html (e naturalmente non si ha l'accesso se si scrive
http:\\
www.nometuo.it
\cartella\file.zip)?
Grazie
Andrea Monaco


wrote:

Non è possibile farlo col chmod e non mi vengono in mente possibili
soluzioni
Ciao
Andrea Busia
No Spam, Grazie.

 http:\\
www.nometuo.it
\cartella\file.zip)?
con il cmod non ci fai niente. Un'idea potrebbe essere:
1- metti il file '<nomefile>.zip' in un'area esterna alla DocumentRoot del
server
web, oppure in una directory protetta con un file .htaccess che blocca
qualunque accesso diretto
2- fai un cgi '<nomefile>.zip' che non fa altro che leggere il file e
servirlo, ma non prima di aver
2.a- controllato che nella variabile $ENV{'HTTP_REFERER'} ci sia un url di
tuo gradimento. In questo modo impedisci anche che vengano fatte pagine su
altri server web che usano la tua banda per ciucciare il file.
Il cgi ha lo stesso nome del file da ciucciare, cosi' poi l'utente non ha
problemi di renaming quando deve salvare sul disco. Ovviamente questo
richiede che tu possa dare ai cgi nomi arbitrari, cioe' che tu abbia accesso
ad una directory dichiarata con la direttiva ScriptAlias (o equivalente se
non usi Apache) del server web.
Se non puoi farlo devi per forza dire all'utente di cambiare come minimo
l'estensione del file quando lo salva in locale.
Il cgi potrebbe essere una cosa del tipo:
<code>
#!/usr/bin/perl
# La directory in cui si trova il file
$dovesta= 'path/del/file';
# Il cgi ha lo stesso nome del file da ciucciare per non avere problemi
# con il nome in fase di salvataggio sul disco locale
$0 =~ s/^.+\///;
# Le pagine dalle quali e' ammesso mettere un'ancora per il ciucciamento
@goodreferers= ('
http://www.miosito.it/ciucciadaqui.html
',
     '
http://www.altrosito.it/vabeneanchequesto.html'
);
# Se ciuccio digitando direttamente l'url nella barra dell'indirizzo
# del browser
error("Non mi piace che tu ciucci il file in questo modo") if !($referer =
$ENV{'HTTP_REFERER'});
# Se ciuccio mettendo un'ancora in una pagina non approvata da me
error ("O tu che vieni da '$referer', ciuccia i files di casa tua!")
    if !grep /^$referer$/,@goodreferers;
# Arrivo qui, quindi posso ciucciare
# $0 solo se il cgi ha lo stesso nome del file, ovviamente!
sendfile("$dovesta/$0");
sub sendfile {
    my $file = shift @_;
# Se non trovo il file....
    error ("Spiacente, il file '$file' non &egrave; dove dovrebbe essere")
if !-f $file;
# Se invece lo trovo lo leggo e lo sparo
    print "Content-type: application/zip\n\n";
    open ZIP,$file;
    foreach (<ZIP>) { print }
    close ZIP;
    exit;
}
sub error {
    my $error = shift @_;
    print <<ENDERR;
Content-type: text/html
<html>
<head>
<title>Spiacente, niente file per te</title>
</head>
<body bgcolor="white">
<center><font color="orange" face="Arial" size="4">Spiacente, si &egrave;
verificato il seguente errore:</font><br>
<font color="red" face="Arial" size="5">$error</font>
</center>
</body>
</html>
ENDERR
    exit;
}
</code>
ciao, marco
--
Marco Cacchiani                                
e-mail:ma...@sirius.pisa.it
Public pgp key:         
http://www.sirius.pisa.it/marco/pgp_public_key.asc
Sirius Servizi Informatici                     e-mail: 
in...@sirius.pisa.it
Parco Teatro Pasolini, 1                       Phone:  +39 (50) 865120
I-56019 - Vecchiano                            Fax:    +39 (50) 860260
(Pisa - ITALIA)                                
http://www.sirius.pisa.it/

>http:\\
www.nometuo.it
\cartella\file.zip)?
Aggiungo anche che cosě facendo metti fuori uso chi usa getright o
simili, non so se sia cconveniente


 </code>
Il cancelbot mi ha cancelbottato un articolo con il quale postavo (come
attachment) una release piu' meditata del codice che avevo scritto al volo
ieri notte.
Casomai a qualcuno interessasse il sorgente si trova su
http://www.sirius.pisa.it/marco/getfile
Ciao, marco
