Proteggi le directory pubbliche Linux

1

Solo per una breve panoramica. Ho un sistema che può generare fatture e ha un sistema di login per un utente per generare le sue fatture. Diciamo che la piattaforma risiede a /platform e le fatture in /platform/invoices e la piattaforma è al dominio www.exmaple.com . Le persone possono accedere e generare le loro fatture che generano effettivamente la fattura nella cartella invoices e quindi tramite l'url www.example.com/invoices/invoicename.pdf scarica il file. La cartella delle fatture è accessibile pubblicamente per consentire al sistema di prendere il file.

Tuttavia, se per esempio clientA si è spostato su www.example.com/invoices/invoicename-ownedbyclientB.pdf , sarebbe stato in grado di scaricare una fattura che non gli apparteneva.

Posso certamente fare cose per mitigare questo come cancellare la fattura dopo la generazione e scaricare per mantenere la cartella pulita, non consentire l'indice sulle directory per fermare la navigazione, cambiare il sistema in modo che i file vengano inviati via e-mail invece che scaricati su una directory di sistema.

Dal punto di vista del sistema posso facilmente limitare le persone a cui hanno accesso in quanto sono autenticati, ma quale sarebbe il modo migliore per gestire la situazione di cui sopra. Ho preso in considerazione l'utilizzo di htaccess o simili in questa directory per garantire che le chiamate provengano dal server stesso (non ho verificato se ciò è possibile, solo un'ipotesi al momento).

    
posta The Humble Rat 17.03.2016 - 10:39
fonte

2 risposte

1

Stai esponendo il file nella directory all'utente per il download in modo che htaccess non funzioni poiché tutto ciò che puoi fare è controllare il referrer che potrebbe essere facilmente falsificato.

Il modo pulito senza l'autorizzazione dell'utente sta avendo una tabella di ricerca per i nomi dei file che potrebbero avere il seguente aspetto:

+----------------------------------+
| Field            | Type          |
+------------------+---------------+
| file_id          | char(64)      |
| file_name        | varchar(100)  |
| expiration_date  | timestamp     |
+------------------+---------------+

Il campo file_id è una stringa scelta a caso. Questa stringa è esposta all'utente come URL di download. Internamente è possibile memorizzare il file in un luogo non accessibile da Internet. Inoltre, è possibile disabilitare l'accesso al file dopo un periodo di tempo definito in expiration_date . Se il tempo è scaduto, puoi semplicemente cancellare il link dalla tabella. Ciò renderebbe l'enumerazione molto più difficile.

Se si desidera offrire nuovamente il download dopo la scadenza, è possibile aggiungere un campo aggiuntivo come download_token e collegare il tempo di scadenza a questo token. Quindi puoi riemettere il token e definire una nuova data di scadenza.

Ci sono molti miglioramenti e variazioni su questo, ma spero che tu abbia un'idea di base. Se vuoi essere sicuro, collega un'autorizzazione e una tabella di ricerca user_file al download.

    
risposta data 17.03.2016 - 12:38
fonte
1

Crea sottocartelle come / piattaforma / fatture / useridclientA /. E archivia le fatture del cliente in questa particolare sottocartella.

Inoltre non consentire la navigazione in questa cartella direttamente tramite URL del server come https://www.example.com/platform/invoices/* .

Crea uno script lato server (e..g PHP) che convalida l'id utente di ClientA e legge gli unici file clientA sul filesystem e gli consente di scaricare.

Puoi eventualmente ulteriormente randomizzare i nomi di file durante la generazione delle fatture.

    
risposta data 17.03.2016 - 12:32
fonte

Leggi altre domande sui tag