Come posso garantire che i dati caricati sul mio server tramite il mio sito Web siano di un tipo specifico?

0

Sto sviluppando un sito Web che accetta il caricamento di un tipo specifico di dati. In particolare, i dati devono essere una stringa di testo leggibile dall'uomo nell'ordine di migliaia di caratteri. I dati vengono inseriti in un campo di testo che viene quindi caricato sul server quando l'utente fa clic su un pulsante.

Voglio assicurarmi che tutti i dati inseriti nell'area di testo siano conformi al formato accettato, ovvero voglio filtrare qualsiasi contenuto che possa essere caricato da utenti malintenzionati, come immagini, video, eseguibili (o qualsiasi altro file binario per quella materia ), ecc. Come posso raggiungere questo obiettivo? Le mie idee attuali sono le seguenti:

Backend (scritto in Java)

  • Indagine sul contenuto del flusso di dati (caratteri magici, identificatori all'inizio dello stream),
  • Verifica del tipo di file (considerando l'intero stream caricato come un singolo file),
  • rilevamento del tipo MIME.

Frontend (in esecuzione su Tomcat, semplice vecchio HTML + Javascript)

  • Verifica della lunghezza del contenuto (i dati non devono essere enormi , ad es. > x KB / MB),
  • Javascript verifica dei tipi MIME (non hai esperienza con nessuna libreria per questo ...).

Quali altre opzioni ci sono per minimizzare il rischio che gli utenti carichino contenuti indesiderati o contenuti generali che non siano di un certo tipo?

    
posta Klangen 28.12.2017 - 13:58
fonte

1 risposta

2

Ovviamente esegui il controllo sul back-end. L'utente può manipolare il frontend tutto ciò che desidera.

È una buona idea aggiungere un controllo simile sul troppo front-end, se c'è una possibilità realistica che l'utente possa commettere un errore accidentale, e il back-end non può fornire abbastanza informazioni al front-end per gestire l'errore (ad esempio se il back-end restituisce 403 / vietato senza alcuna informazione aggiuntiva). Altrimenti, non preoccuparti.

Per quanto riguarda il controllo sul back-end: è sufficiente che l'input sia ASCII, o deve essere Unicode? Se precedente: basta rifiutare qualsiasi cosa con caratteri al di fuori dell'intervallo 32-127 + CR e LF. In quest'ultimo caso, sono preoccupato che il testo scritto in alcune lingue assomigli spesso a un binario ... Puoi provare a richiedere che sia codificato in utf-8, e quindi controllare, sul back-end (semplicemente decodificandolo) che è valido utf-8. Come sottoprodotto, lo stai prendendo in una stringa, a quel punto immagino che il tuo back-end sarà in grado di gestirlo.

    
risposta data 28.12.2017 - 14:14
fonte