Il modo migliore per utilizzare http ottenere con php server per l'applicazione mobile

0

Sto utilizzando un server http su Amazon Web Services che esegue php e si connette a un DB RDS, anche su AWS.
Sto inviando richieste GET al server per ottenere informazioni.
Le richieste non contengono informazioni private.
Sto cercando di pensare al modo migliore per garantire le richieste il più possibile entro i limiti GET.
Il motivo è ovviamente quello di assicurarsi che solo le richieste valide raggiungano il server.
Un modo a cui pensavo era di passare un token che consenta al server di riconoscere la richiesta come valida. Non riesco a pensare a un modo per generare un token che non è costante e può essere calcolato dal server e dal client.
Esiste un modo migliore? In generale, ciò che è considerato un buon approccio per questo tipo di problemi?

    
posta Yinon Eliraz 04.01.2017 - 17:13
fonte

2 risposte

1

Modifica:

Alla luce delle nuove informazioni (è un'app mobile, solo le richieste da questa app dovrebbero essere consentite) questo post è aggiornato. La vecchia risposta è stata rimossa perché non pertinente.

L'OP vuole quindi garantire che le richieste vengano inviate dalla sua applicazione mobile e non dal programma definito da un utente malintenzionato. Normalmente questo tipo di garanzia viene conseguita firmando digitalmente le richieste utilizzando un certificato (chiave pubblica e privata) sul lato client e utilizzando la chiave pubblica sul server. Se applicato allo scenario delle applicazioni mobili, il certificato deve essere presente nell'applicazione (spedito insieme o trasmesso quando l'app viene utilizzata per la prima volta) in modo che le richieste possano essere firmate.

Ora supponiamo che l'hacker voglia creare i propri messaggi da inviare al server. Affinché queste richieste siano accettate, devono essere firmate. Per firmare questi messaggi ha bisogno della chiave privata che è contenuta nell'app in un modo o nell'altro. L'attaccante si scarica su un dispositivo controllato da un attaccante. Poiché l'integrità del dispositivo mobile non può essere garantita (il dispositivo può essere rootato, emulato, ...) esiste sempre un modo per ottenere il certificato. L'unica cosa che puoi fare è cercare di rendere questo recupero MOLTO difficile. L'offuscamento dell'applicazione può essere di aiuto contro l'analisi statica, ma occorre anche assicurarsi che il certificato sia difficile da trovare in memoria in fase di runtime.

Per provare la difficoltà di questo problema, prendiamo Pokemon Go come esempio. In pochi giorni dal lancio, qualcuno ha intercettato il traffico di rete dall'app al server e ha scritto il proprio programma (eseguito su un computer desktop o portatile) che riproduce il comportamento dell'app (invio di aggiornamenti della posizione del giocatore, lanciando un pokeball, ecc.) che giocavano automaticamente a Pokemon Go. Questo è noto come "bot". Gli sviluppatori rilasciano diversi aggiornamenti per proteggere le richieste (presumo abbiano provato anche la firma digitale) ma ogni volta che gli hacker sono in grado di invertire la logica e creare le proprie richieste. L'unica cosa che ha funzionato davvero è stata quella di esaminare gli schemi nelle richieste dal lato server per rilevare che provenivano da un "bot" anziché da un'app mobile legittima. Le cose che hanno usato sono il tempismo delle richieste (esattamente 1 secondo a parte), la posizione del giocatore che cambia in determinati schemi, ecc. Se un giocatore è stato assunto per barare usando un bot, è stato bannato. Gli aggressori hanno risposto a questo aggiungendo un po 'di randomizzazione alle loro richieste per rendere l'analisi più difficile. Quindi è diventato un gioco di gatti e topo tra attaccanti e difensori. Pokemon Go ha anche mandato a cessare e desistere lettere a persone che potrebbero identificare come sviluppatori dei bot. Questo dimostra quanto fossero impotenti contro il problema.

    
risposta data 04.01.2017 - 17:20
fonte
0

per il tuo token usa un hash dell'ora corrente, un segreto e il resto della query.

    
risposta data 05.01.2017 - 01:38
fonte

Leggi altre domande sui tag