Utilizzo di HTTPS OTTIENI dall'app al server

1

Durante lo sviluppo di pagine Web, dicono che dovresti usare il POST per azioni "distruttive" e OTTIENI per le azioni che recuperano solo le informazioni.

Lo stesso vale per le app? È un no-no totale utilizzare GET per inviare richieste da un'app per iPhone su HTTPS a un server Web per azioni come:

  • Creazione di giochi
  • Aggiornamento dei punteggi
  • Invio di messaggi

(Nessuna delle azioni è in realtà "distruttiva", nessuna delle funzioni del server ELIMINA nulla, anche se alcune cose UPDATE come i punteggi più alti, che possono essere considerati distruttivi dal momento che sovrascrivono le cose.)

Ho dei backup in caso di perdita di dati, ma lo chiedo a prescindere da questo.

    
posta forthrin 26.08.2013 - 16:24
fonte

3 risposte

3

Il punto su "GET distruttivo" è che gli attaccanti possono invitare involontariamente alcuni utenti della vittima a inviare tali richieste "GET". Questo è semplice: l'utente malintenzionato deve solo includere, sul suo sito Web, un tag <img> che punta all'URL di destinazione. Il browser della vittima eseguirà quindi il fatidico GET.

Le normali richieste provenienti da un'applicazione e non da un browser non cambiano questo fatto. Il problema non è da dove vengono le normali richieste, ma quali richieste anormali possono fare.

Ciò che potresti immaginare è fare in modo che la tua applicazione aggiunga delle intestazioni HTTP specifiche per applicazione, che il server verifica, e che un browser Web di base non venga impostato in un normale GET. Ma poi, non hai più un "normale GET". Sembra più semplice, più sicuro e meno hacker usare semplicemente le richieste POST per tutto ciò che può essere distruttivo (compresi i dati aggiornamenti ); o, ancora più semplice, richieste POST per tutto . Se il client è un'applicazione personalizzata, non dovrebbe avere motivo di preferire le richieste GET su POST.

    
risposta data 26.08.2013 - 16:54
fonte
1

Solo per aggiungere alla risposta di Thomas Pornin, le richieste GET sono soggette alla memorizzazione nella cache da parte dei server proxy, pertanto non è possibile garantire al 100% che una richiesta GET possa essere inviata al server di destinazione e non ottenere la risposta da un proxy. Sì, puoi aggiungere intestazioni per specificare che non ci deve essere la memorizzazione nella cache, ma non tutti i proxy rispettano le regole. Non è più semplice utilizzare le best practice e postare i tuoi aggiornamenti? Non riesco a capire perché vorresti usare GET (a parte la pigrizia). Usando POST si sta informando su tutto (browser / provider HTTP, proxy e server) che la richiesta apporta una modifica "distruttiva" e dovrebbe garantire che la richiesta sia fatta in modo appropriato senza la necessità di gestire le intestazioni delle richieste.

Inoltre, è meno probabile che le richieste POST abbiano i parametri registrati, quindi è improbabile che qualsiasi parametro sensibile sulla stringa di query in un GET venga memorizzato al di fuori del controllo dell'applicazione, ad esempio nei log del proxy o del server (ad esempio token) quando viene eseguito il corpo POST invece. Ancora una volta questo non è garantito, ma usando il metodo di richiesta appropriato stai suggerendo l'intenzione della richiesta.

    
risposta data 27.08.2013 - 11:14
fonte
0

Aggiungendo a Thomas la risposta, dovresti sempre ricordarti di fare in modo che la tua app controlli il certificato ricevuto nell'ssl handshake.

È TUO lavoro, come sviluppatore mobile, verificare correttamente se il certificato è valido (se il tuo server usa uno autofirmato, assicurati di inserirlo all'interno dell'app), o se i tuoi utenti saranno inclini a < a href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack"> Gli attacchi MITM e le cose BAD tendono ad accadere in quegli scenari. Gli utenti amano il wifi gratuito ...

    
risposta data 30.10.2014 - 17:35
fonte

Leggi altre domande sui tag