Inizierò con un semplice sistema di autenticazione.
Chiedete all'utente il suo login / password, che invierete al vostro server. Nel server, hai cancellato la password per confrontarla con il database (non parlerò qui dell'importanza di eseguire l'hashing di una password e di usare salt & pepper).
No, utilizzando una connessione non crittografata (SSL), qualcuno tra l'utente e il server può leggere i dati trasmessi (noto come attacco Man In The Middle) e conoscere la tua password utente.
Per questo, è possibile utilizzare una connessione SSL per proteggere l'utente dalla lettura durante l'invio di dati al server. È il modo migliore finora (ancora, non parlerò della limitazione di SSL qui).
Ma un'altra alternativa può essere fatta. Puoi inserire la password usando md5 / sha direttamente nel browser dell'utente e inviarti l'hash. Esistono alcune librerie Javascript per questo. Ma devi ricordare che non tutti i tuoi utenti avranno javascript abilitato (tranne che tu li costringi a usarlo). Inoltre, utilizzando questo metodo, non sarai in grado di aggiungere sale e pepe senza compromettere la sicurezza generale.
Inoltre, non dimenticare che questo non ti proteggerà contro keylogger, trojan e altri. Solo attacchi MitM.
Ora, per il caricamento del file. Il caricamento file predefinito dei browser, intendo <input type="file" />
, non invierà dati crittografati. Se si desidera farlo, è necessario implementare un sistema Java o Flash per caricare file che crittografano i dati prima di inviarli alla rete. Di nuovo, questo non proteggerà i tuoi utenti se hanno un virus sul loro computer.
Ricorda che l'ideologia tra client < - > server è la loro relazione tra loro. Non puoi proteggere il tuo utente dall'avere virus, puoi solo migliorare la sicurezza nel collegamento tra client < - > server e anche il tuo server.
Ora, se vuoi proteggere il tuo server per il caricamento di codice dannoso, la sicurezza del lato client sarà inutile. Non puoi mai fidarti di ciò che gli utenti ti manda. Anche se costruisci l'applicazione html più sofisticata, qualcuno sarà in grado di inviarti dati senza usare questa app.
Tutto quello che devi fare è migliorare la sicurezza sul tuo server: controlla se il file inviato è di tipo corretto controllando che sia il mimetype (con lo strumento giusto, non solo l'estensione!). Rifiuta sempre i file che possono essere eseguiti (.exe, .sh, ecc.) E altro ancora, accertati di cosa fare con questi file. (Puoi consentire il caricamento di file .php, ma devi metterli in una directory in cui non possono essere eseguiti da una posizione remota!)