2008-12-01 14 views
5

Quali sono le migliori pratiche relative alla memorizzazione dei file caricati dagli utenti?Best practice per l'archiviazione dei file caricati nel filesystem

Attualmente, sono durante il seguente metodo per memorizzare i file:

<web_app_root>/course_material/<term_id>/<course_id>/<file_id> 

Come si può vedere, i file vengono memorizzati in base ai tasti nel database. Ho pensato che fosse più sicuro, dal momento che non avrei dovuto filtrare i nomi dei file e trasformare personaggi non sicuri in personaggi sicuri.

Tuttavia, sto iniziando un nuovo progetto e volevo sapere se era una cattiva idea legare il filesystem di una web app così strettamente con un database. Devo archiviare i file in un formato più leggibile?

<web_app_root>/course_material/<term_name_underscored>/<course_name_underscored>/<file_name_underscored> 

Se sì, quali sono i modi migliori per filtrare i nomi dei file per essere sicuri? O è il modo in cui attualmente lo sto facendo come best practice?

risposta

0

Ti suggerisco di prendere quindi fuori dalla web_app_root.

Mi piace il modo in cui stai facendo nel primo esempio.

+0

Finché la directory dei file è fuori dalla directory htdocs, tutto dovrebbe andare bene, giusto? Voglio solo mantenere tutto relativo a un progetto specifico nella sua directory. – rlorenzo

+0

In effetti si parla di sicurezza. Ma un disco separato è la soluzione migliore imho. – user32415

1

Ho sempre archiviato i file in una directory con nomi di file GUID univoci e ho mappato il guid al file nel DB. Finché non stai sfogliando manualmente i file e così via, questa è probabilmente la soluzione più semplice (aggira anche caratteri non validi).

Un'altra opzione è archiviarli come BLOB nel database. L'ho fatto anche io, ma era quello di riempire uno scenario DR replicato, che i moderni dispositivi NAS dovrebbero gestire.

Se si vede la necessità di sfogliare manualmente i file all'esterno dell'app per qualche motivo, quindi utilizzando il nome lungo o breve (tuttavia si desidera sfogliarli) sarebbe più pulito.