Protezione del database remoto da manomissioni in un'app mobile

0

Questa è la prima volta che affronto la distribuzione di app mobili su larga scala. Questa app deve connettersi a un server remoto in cui archiviare e recuperare i dati.

Ho scartato la connessione direttamente al database MySQL in quanto sarebbe una pessima idea, quindi metto alcuni script PHP sul lato server che ricevono i dati dai dispositivi mobili come query POST HTTP e producono una risposta valida a seconda della query.

Ora sto iniziando a preoccuparmi della sicurezza usando questo approccio. Chiunque può connettersi al WiFi della propria casa e impostare come gateway una macchina locale e iniziare a sniffare il traffico, in questo modo sarebbe molto facile sapere quali query vengono inviate e come manomettere alcune query per ottenere / inviare dati non protetti.

Per impedirlo, ho considerato i seguenti approcci:

  • SSL : sembra ovvio, ma per quanto ne so, SSL crittograferà i dati nella transazione via filo, ma è ancora possibile annusarli in un computer locale.

  • Algoritmo di crittografia : crittografa entrambi i messaggi del client e del server con una crittografia sicura. Ciò dovrebbe affrontare altri problemi, tuttavia, poiché codifica alcune chiavi nell'app, che non sembra un grosso problema.

Mi piacerebbe evitare l'utilizzo di componenti aggiuntivi di terze parti e utilizzare il mio codice per fare tutto il resto, ma a questo punto sono bloccato su come procedere.

Qualche idea? Grazie!

    
posta nKn 08.03.2014 - 14:53
fonte

2 risposte

2

@Philipp ha ragione quando dice che non puoi proteggere contro il tuo cliente.

Invece di fare di tutto per mantenere segrete le pseudoquest, dovresti concentrare i tuoi sforzi sulla convalida dell'input e sulla protezione dell'iniezione. Sul server in cui si prende la pseudo-query e la si traduce in una query SQL, accertarsi di inserire correttamente qualsiasi input nella query SQL ed eseguire il controllo di integrità di base per aumentare la barriera contro l'abuso. Un WAF potrebbe anche aiutarti, ma se stai scrivendo la tua domanda, sei nel momento e nel luogo giusto per mettere le protezioni appropriate in situ , che è ancora meglio.

    
risposta data 08.03.2014 - 15:31
fonte
0

Sulla base di commenti, risposte e ulteriori elaborazioni da parte tua, direi che il tuo scenario è qualcosa che Microsoft ha cercato di creare una soluzione con Next-Generation Secure Computing Base (NGSCB) che era precedentemente noto come Palladium . Senza crittografare tutto (codice, memoria, dati nel processore, dati che viaggiano sul bus, trasferimento dati da / verso la rete) e rendendo la chiave inaccessibile all'utente, non è possibile garantire al 100% che il codice funzioni secondo le proprie specifiche. Come inteso da @gowenfawr, il modo migliore per mantenere le cose sicure è eseguire il maggior numero possibile di codice su hardware che non può essere manomesso dall'utente come il server. Ad esempio, molti giochi MMO invieranno solo l'input del giocatore al server e calcoleranno la fisica sul server stesso; il giocatore esegue un client che serve solo per raccogliere input e rendere l'output dal server. Potresti dire che l'approccio più sicuro è l'approccio thin client .

    
risposta data 28.03.2014 - 23:46
fonte

Leggi altre domande sui tag