Percorso file da pubblico a privato

15 contenuti / 0 new
Ultimo contenuto
Percorso file da pubblico a privato

Ciao, mi servirebbe un aiutino, ho cercato ma non ho capito bene come devo fare!

ho alcuni file che possono essere scaricati solamente da utenti autenticati, quindi nella view che mi mostra i file ho settato l'accesso al ruolo "utente autenticato".
In admin/settings/file-system è settato "sites/default/files" e il metodo è pubblico, devo cambiare qualcosa per evitare che qualcuno scarichi questi file senza l'autenticazione?

Grazie

in "permissions" setta che gli utenti non autenticati non abbiano accesso agli upload, se no succede che se per puro caso arrivino al file, possono comunque scaricarlo.

Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.

WeBrain Solution | Pillsofbits Of Bits

Dipende del meccanismo (upload/download) e livello di sicurezza.

Credo che anche se cambi i valori come spiegato da kiuz, se conosci l'URL, si puo' sempre fare il download anonimo del file (perche' e' nella zona pubblica del file system). Provare per credere... Questo potrebbe succedere se, per esempio, io forse autenticato e tu non, ma ti mando l'URL per email. (Esempio un po' forzata, perche' potevo mandarti anche il file ;-) Tutto dipende dal tuo livello di paranoia (o quello del tuo cliente).

Per un sito con contenuto pubblico (diciamo dei depliant), e contenuto privato (uhm, listino rivenditori), un modulo come Private Download controllerebbe i permessi a scaricare un file (irrispetivo dei nodi). Ma (c'e' sempre un ma) i file devono essere trasferiti al sito tramite FTP. Questo modulo l'ho usato io.

Altrimenti prova Private Upload, ma (cosa dicevo) questo ha dei conflitti con altri moduli del tipo upload. Non l'ho mai provato pero'.

Più imparo, più dubito.

Nel frattempo stavo provando private_download, mi ha creato la cartella "sites/default/files/private", ma i file che avevo caricato, e che nella tabella files del DB hanno il path "sites/default/files/nomefile.pdf", come vanno modificati?
e nel caso li trasferisca via FTP li devo inserire e collegare manualmente al nodo nel DB?

____________________
Ho disabilitato private_download e ho provato private_upload, mi aggiunge una casella pubblico/privato negli allegati sui nodi e se metto privato mi sposta il file nella cartella private.

- Nel nodo il link al file è: .../system/files/private/nomefile.pdf e me lo fa scaricare

- Nella view il link è: .../sites/default/files/private/nomefile.pdf e mi da questo errore:
You don't have permission to access /cbe/sites/default/files/private/nomefile.pdf on this server.

Se il modello "FTP upload, download con controllo accesso" ti va bene, e' sufficiente private_download. Io lo preferisco perche' e' semplice.
Se il modello "Upload tramite browser, download con controllo accesso" ti va meglio, allora il voto va a private_upload, ma devi evitare i moduli di conflitto.

I file in sites/default/files normalmente vengono serviti al browser da Apache (veloce, e' quello che fa meglio) non da Drupal (lento, non e' un file server, e un CMS). Pensa al favicon, logo, ecc.
Drupal (ed i suoi controlli d'accesso) gestisce il contenuto dei nodi.

Quando setti il file system a privato in admin/settings/file-system, fai passare il controllo files da Apache a Drupal. Ma devi decidere, l'uno o l'altro.
Come? Beh, sites/default/files (Apache) non e' piu' disponibile ai anonimi, ma system/files (Drupal) si - se hai i permessi Drupal necessari, cioe' hai fatto il login, e' sei un tipo affidabile, e non mi devi dei soldi.
Per chiarire un po: sites/default/files (Apache) === system/files (Drupal) - stesso indirizzario, diversi percorsi, adirittura diversi applicativi.

Con uno o l'altro di questi moduli, puoi avere la torta e mangiarlo. Cioe' public per favicon, et al., private per documenti, er, privati.
Come? Beh, sites/default/files (Apache) rimane come il solito cioe' accessibile ai anonimi, ma sites/default/files/private (Apache) non e' piu' disponibile.
system/files (Drupal, ma meno efficace) e accessibile ai anonimi e system/files/private (Drupal) e disponibile o non secondo i permessi di Drupal, e se mi devi dei soldi.

Quindi, quello che hai notato come link e' un comportamento corretto - sites/default/files/private non dev'essere accessibile, ma system/files/private si - presumo che fai questi test come admin (id=1).

WTF? Beh, se cambi il sito da public a private, o abiliti private_upload o private_download, dopo che hai 'associato' un file con un nodo non so se tutto viene modificato come pensi. Crea un nuovo nodo adesso, con private_upload attivo, uploadi (dal verbo uploadare) un immagine o pdf diverso, poi controlla la pagina, il view, e il file.
Se non funziona ancora, abbiamo un problema, Houston.

Più imparo, più dubito.

Preferirei "Upload tramite browser, download con controllo accesso" con private_upload visto che non ho moduli che vanno in conflitto.

- ho attivato private_upload, mi ha creato la cartella "sites/default/files/private" con questo file .htaccess:
SetHandler This_is_a_Drupal_security_line_do_not_remove
Deny from all

- admin/settings/file-system è settato a: sites/default/files, metodo: pubblico (è sempre stato così dall'installazione)

- creo un nuovo contenuto, allego il file e lo setto come privato, il file me lo mette in "sites/default/files/private"

- nel nodo il link al file è: /system/files/private/ciao.pdf ma me lo fa scaricare anche quando non sono loggato!

- nella vista il link è: /sites/default/files/private/ciao.pdf e mi da errore: You don't have permission to access /sites/default/files/private/ciao.pdf

PS: i test li ho fatti sia come "admin" che come "utente autenticato"

Non riesco a capire dove sta il problema....

_________________________________
Nel caso volessi usare private_download
- dove carico i file via FTP?
- come creo una vista tipo questa che mi elenchi i file? http://www.cbe.it/it/istruzioni
Dato che usi questo modulo mi potresti spiegare per favore se posso farlo?

Grazie

Bravo Sherlock!
Sembra che ci sia un 'misunderstanding' fra views e private_upload. Ma sembra anche che hai trovata la soluzione. Non avevo usato views + private_upload io.

Quote:
ma non ho capito come si installa quel "private_upload.zip"

Questa frase mi preoccupa un po'. Se si chaimava "private_upload.tar.gz" penso che non avresti problemi, vero?
Comunque .zip (Windows) ~= .tar.gz (Linux)

Ti lo spiego, ma solo se prometti di:

  1. Fare le prove su un istallazione Drupal localhost, non su un server di produzione
  2. Fare un backup del database
  3. Fare un backup del codice/files del istallazione Drupal

Oppure ignori questi consigli, prendendo tu la piena risponsibilita' per eventuali perdite di dati, capelli, ecc.

Non dovrebbe succedere niente di male, ma (c'e' sempre un ma) non si sa mai.

  1. Lo zip e' piu' recente del release ufficiale, quindi basta estrare i contenuti dello zip nel indirizzario sites/all/modules o sites/default/modules, insomma nel indirizzario genitore di dove sta adesso private_upload
  2. Rinfrescare la pagina web col view incrociando le dite.
  3. Se non cambia niente, prova svuotare i cache, o riavviare apache, giusto in caso...
  4. Farci sapere cosa succede...

Più imparo, più dubito.

Quote:

Nel caso volessi usare private_download
- dove carico i file via FTP?

In sites/default/files/private
Quote:

- come creo una vista tipo questa che mi elenchi i file? http://www.cbe.it/it/istruzioni

Ah, bella domanda. Io usavo un page, scrivendo i link (system/files/private/nomefile.estensione) a manino perche' erano pocchi file.
L'utente risponsabile per i file modificava la lista nella pagina. Molto semplice, ma funzionale.

Per chi non vuole avere un collegamento FTP (vi capisco), in realta' io usavo SFTP tramite SSH.

HTH

Più imparo, più dubito.

Ciao Watson, ti ringrazio per l'aiuto...
tranqui, ogni modifica la provo prima su una copia del sito e in ogni caso poi copio l'intera cartella ed esporto il DB; il problema non era tanto il .zip ma dove mettere quei file :-) ...

copiando i file del .zip nella cartella modules il link sul nodo e quello sulla view ora hanno lo stesso percorso: /system/files/private/ciao.pdf e mi lascia scaricare i file,

resta il fatto che se faccio il logout e inserisco il percorso di quel file me lo fa scaricare comunque!
secondo te può andare bene così o c'è una qualche possibilità che qualcuno trovi quei file della cartella private?

Bene siamo alla frutta. Credo che private_upload sia il migliore modulo per il tuo scopo.
Scusa se sono stato pedantico, ma su questo sito gli utenti variano tanto nella loro conoscienza. Volevo essere prudente, ma questo mi sembra che hai capito.

<?php
function private_upload_file_download($file) {
 
$private_dir = variable_get('private_upload_path', 'private');
  if(
_private_upload_starts_with($file, $private_dir)) {
   
$filepath = file_create_path($file);
   
$result = db_query("SELECT DISTINCT(u.nid) FROM {upload} u INNER JOIN {files} f ON u.fid = f.fid ".
                      
"WHERE f.filepath = '%s'", $filepath);
    while(
$row = db_fetch_array($result)) {
     
$node = node_load($row['nid']);
      if (
node_access('view', $node)) {
        return;
// Access is ok as far as we are concerned.
     
}
    }
    return -
1; // No nodes are granting access, so veto download.
 
}
}
 
?>

Oooh codice. Cosa dice? Solo che se hai il permesso di vedere un qualunque nodo che e' 'associato' al file, allora puoi anche scaricare il file, se no, no. Neanche a pagamento.

Presumo che come utente anonimo puoi vedere il nodo. Oops. Forse nodeaccess ti permettera' a nascodere il nodo (e quindi il link, ma anche system/files/private/nomefile.ext).

Messo a posto quest'ultimo:

  1. Anonimo non puo' accedere al file con sites/default/files/nomefile.ext
  2. neanche con con system/files/nomefile.ext

Per anonimo intendo un utente che non ha permessi di vedere il nodo.
Non completamente blindato, ma almeno questo supera il mio livello di paranoia.

Curioso che il codice citato (da private_upload.module, riga 234) non controlla per quel essere suprema, uid=1. Hmmm.

HTH

Più imparo, più dubito.

Con nodeaccess è perfetto!
ti ringrazio un sacco!

Ciao ciao

Ha funzionato bene fino ad oggi, ed ecco che salta fuori il problema... senza aver installato altri moduli o modificato impostazioni.

Private_upload mi da questi 2 errori:
- Unable to test file access:
- Very bad! Your private files are not private!

se vado a vedere nei log c'è questo:
fsockopen() [function.fsockopen]: unable to connect to www.cbe.it:80 (Unknown error) in /home/htdocs/cbe/modules/private_upload.module alla riga 768.

Sapete aiutarmi per favore?

Hmm. Ho guardato il codice (riga 138):

<?php
 
// Write a test file to the private folder to test public access.
 
$test_file = $private_path.'/privacy_test.txt';
  if (!
file_exists($test_file)) {
   
$test_path = file_create_path($test_file);
   
file_save_data( "This is just a test.", $test_path, FILE_EXISTS_REPLACE );
   
drupal_set_message("Added test file: $test_path.");
  }
  if (
file_exists($test_file)) {
   
$url = $GLOBALS['base_url'] .'/'. $test_file;
    if ( !
_private_upload_is_url_protected( $url )) {
     
$requirements['private_upload_readable'] = array(
       
'title' => t('Private Upload'),
       
'severity' => REQUIREMENT_WARNING,
       
'value' => $t('Private directory is publically accessable!'),
       
'description' => $t('Very bad! Your private files are not private!'),
      );
     
$status[] = '<div class="error">'. $requirements['private_upload_readable']['description']. '</div>';
    }
    else {
     
$secure = true; // good can't read files in private folder
     
$status[] = '<div class="ok">'. $t("Your private folder is not accessable. Great!"). "</div>";
    }
  }
?>

Non e' che hai cancellato, modificato o perso il file .htaccess nel $private_path per caso?

John

Più imparo, più dubito.

No no, il file .htaccess c'è ancora, e non ho modificato niente...
[root@ServerWeb private]# more .htaccess
SetHandler This_is_a_Drupal_security_line_do_not_remove
Deny from all

l'unica cosa che ho fatto è stato riavviare il server, forse è quello perchè il problema me lo fa su 2 installazioni di drupal (1 è quella che uso per fare i test), non è che sia qualche permesso?
che utente.gruppo devono avere le cartelle di drupal?

Ho provato a cancellare il file privacy_test.txt e salvando le impostazioni me lo ricrea senza problemi
- Added test file: sites/default/files/private/privacy_test.txt.
ma mi da sempre i 2 errori:
- # Unable to test file access:
- # Very bad! Your private files are not private!

Buongiorno,
una domanda....
ho provato il modulo private_download.. seguendo le indicazioni che avete dato..
ma a me non ha creato la cartella
"sites/default/files/private"

è normale la cosa?