Quali pratiche di sicurezza dovrei tenere a mente durante lo sviluppo? [chiuso]

1

Sto iniziando a sviluppare app per Android e iOS che effettuano chiamate API a un'applicazione Web PHP che svilupperò. Agli utenti sarà richiesto di registrarsi con un nome utente, una password e (facoltativo) numero di telefono ed e-mail, e ho intenzione di mantenere questi dati in un database SQL. Gli utenti potranno registrarsi dalle app telefoniche e sul sito Web in cui è ospitata l'API basata su PHP. So che troppo spesso gli sviluppatori di applicazioni non danno priorità alla sicurezza e mi piacerebbe assicurarmi di farlo.

In termini di sicurezza dei server web cosa posso fare per assicurarmi che i dati dei miei utenti rimangano al sicuro? Durante lo sviluppo, quali tipi di pratiche di sicurezza dovrei adottare per mantenere la mia applicazione più sicura possibile? (ad esempio, sanitizzare l'immissione di nome utente / password per impedire l'iniezione SQL, SSL per le chiamate API dalle app al server web, non effettuare chiamate API con password in chiaro, ecc.)

So che la domanda è ampia, ma penso che ogni risposta rappresenti la possibilità di una maggiore protezione a cui non ho pensato.

    
posta jstrieb 28.07.2015 - 21:44
fonte

1 risposta

5

Dalla cima della mia testa:

  • la sicurezza del server API, il che significa che potrebbe essere necessario assumere un amministratore sysadmin competente per occuparsene se non si ha esperienza con l'amministrazione del sistema. Qualsiasi sicurezza implementata in precedenza (autenticazione API, ecc) diventa discutibile se il server stesso viene compromesso. Tieni presente che ogni software installato su di esso è una responsabilità e installa solo ciò di cui hai effettivamente bisogno, ad esempio non lasciare un'istanza PhpMyAdmin installata nel caso in cui ne hai bisogno.
  • separa il server che ospita l'API da quello che ospita il tuo sito web pubblico, idealmente il tuo sito web pubblico può essere compromesso senza alcun rischio per i dati dell'app poiché risiede su un computer separato.
  • scappa dall'hosting condiviso. Potrebbe essere allettante iscriversi a un piano di hosting condiviso (sono così economici e non sembrano richiedere alcuna manutenzione) ma la loro sicurezza è disastrosa (anche di più se stanno usando questo pasticcio di cPanel come il server di hosting è più probabilmente già compromesso) e un exploit di esecuzione del codice sul sito di qualcun altro può essere sfruttato per utilizzare un exploit del kernel, ottenere l'accesso root e compromettere l'API e i dati.
  • indurisci lo stack web per non esegui file PHP arbitrari - se utilizzi un framework (dovresti), l'unico file che deve essere eseguito è il punto di ingresso del framework (di solito index.php in questo modo, anche se un file PHP errato si trova in qualche modo sul tuo server, non verrà eseguito e sarai comunque al sicuro (assicurati di controllare in che modo il file è arrivato in quel momento e se qualche altro codice si è verificata l'esecuzione). Leggi la mia risposta in qualche modo correlata dal mio vecchio account.
  • naturalmente assicurati di gestire correttamente l'input dell'utente, le password di hash e controlla OWASP.
  • ogni dato personale che raccogli è una responsabilità nel caso in cui il tuo server venga compromesso (è solo una questione di quando ) - hai veramente bisogno dei numeri di telefono degli utenti? (inviare SMS spam non è una risposta corretta, e nemmeno l'autenticazione 2FA poiché può essere eseguita completamente offline utilizzando TOTP / HOTP senza richiedere numeri di telefono)
  • rafforza la configurazione TLS del server - consenti solo i cifrari più forti supportati dal tuo mercato di destinazione, ad esempio se scegli come target i dispositivi iOS7 quindi consenti solo i cifrari più potenti supportati da iOS7 e verso l'alto. Se il targeting di iOS8 fa lo stesso, ma permetti solo quelli supportati da iOS8, ignora eventuali cifrari più deboli in quanto non ti interessa se i dispositivi meno recenti non li supportano. Applica la segretezza in avanti se le cifre che hai scelto lo permettono. Utilizzare la propria CA per firmare i certificati del server API e incorporare tale certificato CA nell'app per impedire che qualsiasi altra CA si proponga come server (ricordare DigiNotar?).
  • aggiungi alcuni captcha limitanti la velocità e le azioni ripetute per contrastare bruteforce e spammer.
  • evita di incorporare codice di analisi di terze parti nella tua app - non solo è irrispettoso per l'utente (il fatto di aprire l'app tua non dovrebbe eseguire il ping di alcuni server di analisi di terze parti, indipendentemente da come sicuro è), ma ciò può anche ostacolare la sicurezza in quanto potrebbero presentare vulnerabilità o requisiti di sicurezza inferiori (consentendo crittografie TLS più deboli, ecc.)
risposta data 28.07.2015 - 22:39
fonte

Leggi altre domande sui tag