Come garantire che i file caricati dagli utenti non contengano Javascript

1

Sto cercando di fare un uploader di file usando PrimeFaces , ma è vulnerabile agli script: se qualcuno cerca di caricare un file (ad es. un curriculum) che include JavaScript, questo potrebbe essere eseguito una volta completato il caricamento del file.

Esistono metodi efficaci per rilevare il codice JavaScript? So che analizzare il file può rilevare il codice, ma considero l'analisi di ogni file che ha caricato un'idea sbagliata perché consuma potenza di elaborazione.

    
posta codechefvaibhavkashyap 13.05.2014 - 09:37
fonte

5 risposte

1

Non dovresti tentare di farlo perché non c'è modo di rilevare tutti gli script dannosi. Esistono vari modi per nasconderlo in quanto non tutti sono presentati in modo corretto all'interno di <script> tag. Prendi questo per esempio:

<BODY onload!#$%&()*~+-_.,:;?@[/|\]^'=alert("XSS")>

Dai un'occhiata al XS Filter Evasion Cheat Sheet per altri esempi.

Se stai visualizzando i file caricati in HTML, dovresti impostare una politica di sicurezza dei contenuti per impedire l'esecuzione di JavaScript e CSS incorporati. (Utilizzando CSS è possibile incorporare JavaScript, alcune versioni di Internet Explorer supportano questo)

Il CSP può prevenire lo script inline, ma consentire l'esecuzione dello script in file js esterni dal tuo server o da fonti attendibili (come Google CDN).

Dovresti assicurarti di verificare che il browser supporti prima CSP (potresti implementare un test per questo in una pagina prima di visualizzare il contenuto), e potresti farlo in combinazione con un disinfettante HTML che elabora la pagina contenuto solo su output nel browser. Questo sarà un approccio di cintura e bretelle. È necessario utilizzare una soluzione ben collaudata per la sanitizzazione, ad esempio OWASP AntiSamy . Alcune vulnerabilità sono state trovate nelle versioni precedenti della maggior parte dei disinfettanti (anche questo), ma l'uso in combinazione con un CSP avrebbe impedito la maggior parte degli attacchi in quanto ciò avrebbe fornito la finestra di tempo per applicare la patch all'ultima versione.

L'altra opzione sarebbe quella di aggiungere l'intestazione Content Disposition a qualsiasi contenuto servito, in modo che venga scaricato in la macchina dell'utente anziché la visualizzazione in un browser nel contesto del tuo dominio. Qualsiasi codice in esecuzione nel contesto del tuo dominio può trarre vantaggio dalla Stessa politica di origine per attaccare gli utenti che visualizzano il contenuto. Ciò non sarebbe possibile offline (Internet Explorer invia un messaggio di avviso con prompt di conferma e browser come Chrome e Firefox considerano il file system come null di origine per interrompere lo script che accede al contenuto online).

    
risposta data 14.05.2014 - 11:54
fonte
0

Il file deve essere ispezionato prima di memorizzarlo. Per rilevare il codice JavaScript incorporato, non avrai altra scelta che analizzare l'intero contenuto del file.

    
risposta data 13.05.2014 - 10:31
fonte
0

Devi assolutamente cercare quel file per assicurarti che non ci sia JavaScript. Ma potrebbe essere semplice come cercare token come "(", ")" e ";" (Ad esempio, non sono sicuro se questo è sufficiente ...). Ovviamente quando si esegue questa operazione, queste lettere non possono più presentarsi nel contenuto normale. Quindi se la tua definizione 'personale' di parsing 'sta facendo operazioni complesse sul file come f.e. costruendo un albero di analisi di esso ', quindi questa è una soluzione senza analisi.

Tuttavia, la soluzione preferibile al tuo problema sarebbe quella di assicurarti che nessun JavaScript possa essere eseguito, indipendentemente dal fatto che si trovi nel file o meno.

    
risposta data 13.05.2014 - 10:39
fonte
0

Quello che stai cercando di fare è prevenire un attacco di cross-site scripting ("XSS"). Potresti provare a eseguire alcune sostituzioni di stringhe per sostituire determinati caratteri con le loro entità HTML (come <script> con &lt;script&gt; ) per impedire a un browser Web di riconoscerli come codice da eseguire pur continuando a visualizzarli nel modo in cui l'utente li ha immessi, ma quando si tratta di sicurezza, è sempre meglio fidarsi di una soluzione comprovata piuttosto che lanciare la propria.

Ci sono molti casi limite che permettono di incorporare javascript in HTML che potresti dimenticare. Ma quando si utilizza una libreria ben nota progettata da specialisti della sicurezza Web e raccomandata da altri specialisti altrettanto capaci, si può presumere che abbiano queste eventualità coperte.

Ci sono molte librerie disponibili appositamente per questo scopo. Hai taggato questa domanda come Java, quindi presumo che stai usando Java (JSP?) Per la tua programmazione lato server. La domanda " Prevenzione XSS in Java " su Stackoverflow elenca alcune librerie che è possibile utilizzare.

Prova a disinfettare gli input dell'utente non appena il server lo riceve. Più a lungo mantieni le stringhe non callizzate, più alto è il rischio che perdano da qualche parte, come in un messaggio di errore in un registro che qualcuno poi visualizza con un browser web.

    
risposta data 13.05.2014 - 12:07
fonte
0

In pratica hai due opzioni qui:

  1. Analizza i file e assicurati di aver capito bene. Non puoi semplicemente rimuovere i tag script, devi anche rimuovere gli attributi che abilitano lo scripting, assicurati che i link non abbiano javascript: URI dello schema, ecc. Se scegli questa route, ti suggerisco di usare qualcosa come OWASP Java HTML Sanitizer , invece di provare a implementarlo da solo, dato che non è banale.

  2. Smettila di preoccupartene. Metti i file dove non possono fare danni. Questo è un approccio adottato da molti siti che offrono contenuti generati dagli utenti. Se le pagine sono pubblicate da un'origine che non contiene contenuti e contenuti sensibili non ha cookie sensibili, quindi un XSS non è in grado di compromettere nulla. Se servi i file da "useruploadedcontent.com", a causa di SOP gli script sono in grado di interagire solo con "useruploadedcontent.com" e non "domainwithsensitivecookies.com".

risposta data 13.06.2014 - 16:10
fonte

Leggi altre domande sui tag