Convincere l'amministratore di sistema che i file di caricamento possono essere in ordine?

Per mantenere questo il più corto ansible: è stato recentemente portto all'attenzione del nostro amministratore di sistema (come questo tipo di cose dovrebbe essere) che uno dei requisiti per il nostro ultimo progetto web-based permetterebbe ai clienti di eseguire upload di file. In particolare questi saranno soprattutto immagini e possibilmente video [ma siccome sappiamo, non puoi garantire che contenuto esatto del caricamento sia fino al server].

L'amministratore del sistema è stato un po 'messo fuori, ed è arrivato appena a corto di un brusco "No!".

  • Impostazioni di ColdFusion per caricamenti di file di grandi size
  • Limite di rilascio di file di file di beanstalk elasticizzato AWS
  • Come rilevare o registrare upload interrotti con OpenSSH SFTP server?
  • Consenti il ​​caricamento anonimo per Vsftpd?
  • Sono a conoscenza di molte delle migliori pratiche in materia di input da parte degli utenti, gestione di upload, ecc., Quindi sono molto fiducioso dell'aspetto dietro le quinte / codice di questo progetto. La mia domanda è, ci sono risorse specifiche o punti di conversazione per portre a facilitare la mente del mio amministratore di sistema? Cosa dovrei concentrarmi per spiegargli su questo tipo di cose, come è gestito, ecc?

    Alcune preoccupazioni sono lo spazio di archiviazione potenziale (che conosco deve essere calcolato in base alla stima del "tempo di popolarità" delle size del file stimato) e ai problemi di sicurezza con l'hosting di contenuti caricati.

  • Limite di rilascio di file di file di beanstalk elasticizzato AWS
  • Impostazioni di ColdFusion per caricamenti di file di grandi size
  • Consenti il ​​caricamento anonimo per Vsftpd?
  • Come rilevare o registrare upload interrotti con OpenSSH SFTP server?
  • 9 Solutions collect form web for “Convincere l'amministratore di sistema che i file di caricamento possono essere in ordine?”

    Alla fine della giornata, sia tu che l'amministratore, sono presenti per sostenere le esigenze aziendali. La sfida è trovare il giusto equilibrio di funzionalità (caricamento di file) e non funzionali (sicurezza, costo del disco, performance) approcci.

    • Whitelist ha permesso le tipologie di file, in modo che il sito non diventi il ​​sito personale di un archivio MP3 di qualcuno.
    • Impostare size ragionevoli di caricamento dei file e progettare in modo tale che gli amministratori aiutino con soluzioni alternative per size grandi ma necessarie.
    • Implementare la limitazione dei tassi. Jane necessita davvero di caricare contemporaneamente 5 file, o 300 file in un solo giorno? Generalmente questi dovrebbero essere impostati ad una velocità invisibile all'utente normale, ma abbastanza evidente per un utente malintenzionato.
    • capire come la tua applicazione consuma risorse – memory e disco. Se sei egoing a pezzi, cosa farai per ripulire le sessioni cadute? Quanto fissa la memory di un file da 10 MB sul server durante il caricamento?
    • Capire il ciclo di vita dei dati. Quando non sarà più necessario? cosa provoca la sua cancellazione?
    • Qual è la tua applicazione quando l'antivirus mette in quarantena un file caricato?

    Chiunque consiglia di controllare le estensioni di file come un modo per assicurarsi di essere al sicuro è folle. È abbastanza facile da rinominare un'exe o un mp3 in un gif. Quanto per il tipo di MIME di caricamento.

    L' unico modo per essere sicuri del tipo di upload è quello di analizzarlo; cercare le firme di file all'interno del file, caricarla in un processre di immagini e vedere se soffoca, ecc. ecc.

    Quello che devi fare dipende dal tuo sistema operativo e dal server web, ma in genere i caricamenti non devono andare su un disco separato, quindi non ucciderai il tuo sistema operativo quando qualcuno carica tantissimi file e prende tutto lo spazio. Ovunque siano caricati, non dovrebbero contenere le autorizzazioni di esecuzione, in modo che nessuno possa eseguire un file da lì tramite il browser (solo nel caso in cui sia uno script in qualsiasi lingua web in uso), ancor meglio non permettano riferimenti diretti affatto, servire i file tramite una pagina di utilità con qualcosa di simile a un GUID come parametro (es. displayImage? id = 0000-000000-0000-0000)

    E, naturalmente, la scansione di virus, limita la dimensione massima di upload (sebbene attenti a questo, IIS6 ad esempio non riesce a controllare la lunghezza del stream a metà strada e così memorizza il caricamento in memory finché non è terminata e poi lo passa nella tua applicazione asp.net )

    Leggi questo sito: http://www.owasp.org/index.php/OWASP_Top_Ten

    Notenetworking che "upload Apache magicamente corrotto" non è una nota vulnerabilità di protezione.

    La gestione del caricamento di Apache può essere danneggiata – e inaspettata male – ma devi realmente lavorare ignorando l'elenco delle vulnerabilità di OWASP.

    Inoltre, il tuo framework – che non hai citato – ha specifiche linee guida per gestire i file in modo sicuro. Se non dispone di alcuna disposizione per il caricamento, eseguire – non camminare – ad un quadro migliore.


    "[ma siccome sicuramente sapete, non puoi garantire che contenuto esatto del caricamento sia fino al server]."

    Lungi dal vero. E irrilevante anche se è vero per il tuo particolare quadro.

    I file passano attraverso i buffer. I framework di Python rendono il caricamento disponibile nella cache (se è enorme) o in memory (se è piccolo). Non è "effettivamente" nel filesystem anche se è in una cache supportta da file. Non ha il nome definitivo o le autorizzazioni – è solo byte.

    Bytes non magicamente corrompono Apache. I file esentibili con properties; di mancanza (e / o un bit setuid nelle loro autorizzazioni) danneggiano Apache.

    Il trucco con i caricamenti è quello di (a) sfruttare la cache del tuo framework, (b) validationre i dati prima di salvarlo da nessuna parte, (c) salvarlo da qualche parte non esauribile – da qualche parte Apache non può cercare eseguibili e (d) mai chmod chown qualsiasi cosa in qualsiasi circostanza. Un caricamento non eseguibile può causare problemi se è denominato .htaccess e il tuo lo ha scritto nella directory Apache che lo recupera da un'azione che è facilmente evitata impostando le autorizzazioni in questa directory e non nominando mai un file caricato .htaccess .

    Ci sono poche vulnerabilità. Sono ben documentati. E il tuo quadro già gestisce questo.

    Se questa è una parte vitale dei requisiti aziendali, non riesco a vedere come potrebbe rifiutare finché i protocolli di protezione sono seguiti (ad es. Estensione del file filter / tipo, tipo MIME, dimensione del file, ecc.)

    Supponendo che faccia parte di una scala aziendale (e non l'unico sysadmin della società) prova a andare al suo supervisore e spiegare la tua situazione.

    Ricorda che è ansible verificare il tipo di file caricati (utilizzando il tipo di rilevamento di tipo MIME, esistono vari modi per eseguire questa operazione in PHP o utilizzando un'utilità esterna come un file ) e potete eseguire la scansione per i virus utilità esterna.

    Presumibilmente, una volta che hai elaborato e verificato un file caricato, lo sposterai nella sua posizione finale e rifiuterai i file che non passano queste fasi; se è così, potresti essere in grado di ragionare con l'amministratore di salvare solo i file "sicuri".

    Potresti iniziare a chiedergli quali sono i suoi punti di forza importnti sulla questione; è preoccupato per la sicurezza / sicurezza, con la responsabilità di pubblicare contenuti forniti da altri utenti (e le eventuali implicazioni di sicurezza degli utenti finali che solleva) o è preoccupato per questioni infrastrutturali – storage, networking, ecc.

    Nota: "Sicuro" sopra si riferisce alla sicurezza nei controlli eseguiti. Ovviamente, non è ansible garantire la sicurezza assoluta di tutto ciò che l'utente fornisce.

    Il caricamento dei file può essere complicato da gestire, in sicurezza e in generale.

    Per avere un'applicazione abbastanza sicura è necessario …

    1. Limita il formato del file. Non si desidera che le persone che utilizzano la width di banda troppo o utilizzare il sistema per memorizzare tutti i loro dati.
    2. Limitare i tipi caricati (non consentono script .exe o bash). Puoi farlo solo controllando l'estensione del file. È ansible eseguire anche il controllo del tipo di file effettivo, ma nella maggior parte dei casi sarebbe overkill. A seconda della lingua / sistema in uso, ci sono diversi modi per farlo.
    3. Prestare attenzione a alcuni formati che presentano buchi di sicurezza.

    Poi dipende anche dalla fiducia che metti nei tuoi utenti finali. Se si tratta di una intranet in cui tutto è stato monitorato, non c'è bisogno di altrettanta sicurezza che un sito pubblico! Se gli utenti sono noti, non dovrai controllare tutto quanto.

    Un altro buon controllo della sanità – non caricare file su disco, ma piuttosto memorizzarli in un database. Questo uccide il classico "upload file malvagio, quindi eseguire il file malvagio nel context server" perché i file non esistono sul server.

    Ora, è sempre ansible scoraggiare la distribuzione dei file da scaricare se si hanno problemi di performance con i file supportti da db.

    Dato che l'amministratore ha detto: "uh, no". agli sviluppatori che chiedono di caricare i file sul server, posso dirvi le cose che cerco in un'applicazione che sembra farlo. Il vincolo principale è che, a less che non stiamo parlando di un server web dedicato, i nostri server web non sono stati dimensionati con l'archiviazione di file di massa in mente.

    • Qual è il ciclo di conservazione dei dati? Se questi dati saranno sul server web per sempre, sono molto più probabile che forza quella applicazione sul proprio server dedicato. Se questi dati sono solo sul server per alcuni secondi mentre il software lo analizza e poi la cancella, sono molto più probabile che lo farò succedere. Mi incoraggio quando c'è un process di scavenging che pulisce i file morti / vecchi. Mostra che loro si preoccupano.
    • Di quali file di size ci stiamo parlando? Se è file weensy office-doc, è una cosa. Ma i file di forma GIS enormi sono un'altra cosa interamente.
    • Qual è il pubblico previsto? Se gli utenti di Internet anonimi possono caricare file, aumenta seriamente il modo in cui devo paranoidare su questi dati.

    Una delle start-up che ho lavorato per alcuni anni fa era un sito di caricamento di video e immagini su Linux (quindi tutto il mio esempio è da quello). Ci sono una serie di cose che possono sbagliare con il permesso di caricamenti.

    Tutti i sisthemes di caricamento dovrebbero transcodificare il formato originale nel formato standard. Il vantaggio di questo è duplice. In primo luogo si dispone ora di un formato standard che rende la visualizzazione di immagini e video molto più facile sul tuo html. Il prossimo se sei certa che hai cambiato il file abbastanza che non stai ospitando file infetti. Se stai pensando di servire i file caricati raw da qualsiasi utente con un indirizzo email, puoi avere una gran quantità di problemi.

    Come altre persone hanno già parlato, è necessario un po 'più che controllare l'estensione. Questo è un problema più difficile da risolvere. Abbiamo preso un paio di pugni che non sono mai stato felice, ma vale la pena fare per un paio di motivi. Il grande è che probabilmente avrai più routes per la transcodifica dei video. Il video viene fornito in diversi contenitori insieme ad alcuni milioni di combinazioni di tracce audio e video. Più sai sul file la scelta migliore sarà quella di elaborarla o di rifiutarla definitivamente.

    Supponendo che stai trascodificando i file, sei vulnerabile agli exploit nelle librerie di elaborazione come ffmpeg o libgd. Scriveremo il file originale su disco sulla condivisione NFS e poi spawneremo l'elaborazione in un ambiente di carcere / chroot. Questo ci ha permesso di transcodificare in un nuovo formato o di non riuscire in una singola directory senza infettare il server o altri file. Anche il sistema di transcodifica deve essere molto aggiornato in modo da poter controllare each giorno la tua distribuzione per assicurarsi che le librerie sottostanti come libpng, libtiff, libmad, libdv, ecc non dispongano di bug correnti di sicurezza.

    Tornando alla domanda originale, assicuratevi di affrontare le problematiche sottolineate da tutti e non dovresti avere problemi a prendere il tuo sistema a bordo e avere un'applicazione molto migliore anche alla fine. Purtroppo il tuo lavoro di sysadmin dice "No" a cose che sembrano essere un incubo operativo da sostenere.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.