2011-12-08 12 views
8

Vogliamo utilizzare un servizio web nella nostra app che ovviamente richiede di chiamare un URL. Non è HTTPS, semplicemente vecchio HTTP, usando NSURLConnection.Quanto è sicuro chiamare gli URL "segreti" in un'app iOS?

Il problema è: Questo servizio web è molto costoso e ogni mille chiamate ci costa soldi veri. Il timore è che qualcuno possa capire quale URL chiamiamo e quindi abusarne, lasciando che i costi esplodano. Non è possibile per noi tracciare se una chiamata a quel servizio Web è legittima.

Stiamo calcolando in base a quanti apps che vendiamo, moltiplicato per un presupposto di quanto spesso sarà utilizzato che app per utente in media. Abbiamo alcune buone statistiche su cui basiamo le nostre ipotesi.

Ci sono noti modi di capire quale URL un'applicazione sta chiamando su Internet per recuperare le informazioni?

+0

Quello che stai facendo è fondamentalmente insicuro. Non sarai in grado di nascondere questo modulo di informazioni a un utente malintenzionato. Questo è solo "(dentro) sicurezza attraverso l'oscurità". – rook

risposta

2

Sì, ci sono molti modi per farlo. Per un esempio, collega l'iPhone a una rete wifi, in cui il router ha un proxy trasparente. Esaminare i log del proxy. Vedrai tutti gli URL. Dipende da quanto sono determinati i tuoi utenti, ma questo è piuttosto facile.

4

Se il servizio Web non è crittografato, sarebbe banale per utilizzare un proxy per intercettare le richieste Web effettuate dal telefono. Se il costoso servizio Web non offre almeno una qualche forma di autenticazione di base, vorrei seriamente riconsiderare l'inclusione dell'URL in un'app pubblica.

+0

Puoi spiegare cosa intendi per "banale" e "proxy"? È un router WiFi che fornisce un protocollo su cosa succede? Il servizio Web è "protetto" da un ID utente nella richiesta URL. In questo modo determinano il loro "cliente". Naturalmente chiunque potrebbe copiare quell'URL e chiamarlo esattamente così per nostro conto. – dontWatchMyProfile

+0

Sicuro. Non c'è bisogno di andare in giro con un router. Ogni volta che eseguo il debug di un'app di rete su cui sto lavorando, accendo il mio fidato proxy software [http://charlesproxy.com] Charles e imposto le impostazioni WiFi del mio iphone per utilizzare l'indirizzo del mio desktop come proxy. Con questo, posso monitorare tutte le richieste HTTP inviate e ricevute dal mio telefono. Ti consiglio caldamente di utilizzare tale software per testarlo tu stesso: sarai in grado di vedere ciò che chiunque altro può raccogliere dalle tue richieste di rete. –

12

si potrebbe facilmente utilizzare uno sniffer di rete mentre il telefono è acceso WiFi per capire queste informazioni. Sembra che in realtà sia fondamentale utilizzare SSL con una sorta di token sicuro nell'URL.

Se questa non è un'opzione forse si può fornire il proprio servizio proxy che avrebbe utilizzato SSL e sicurezza gettoni? Il proxy consente inoltre di limitare le richieste e bloccare gli utenti noti per essere dannosi. Throttling pone un limite superiore alla spesa che ogni utente può sostenere in un dato intervallo di tempo. Un altro vantaggio di un proxy è che consente di raccogliere statistiche e misurare i costi sostenuti da utenti diversi, facilitando il rilevamento di utenti malintenzionati e la pianificazione aziendale. Proxy potrebbe anche risparmiare denaro se il servizio dietro di esso è stateless aggiungendo una cache che rimuoverebbe molte chiamate costose.

+0

+1 Notare che SSL può ancora essere annusato con un proxy come Charles se il programma si fida ciecamente del certificato. È necessario verificare che il certificato sia firmato da * te *, non solo "un firmatario fidato". Inoltre, è sempre possibile eseguire il reverse engineering del programma per determinare il carico utile, ma un proxy SSL verificato aumenterà significativamente la barra su iOS, lasciando attaccanti per lo più altamente motivati ​​piuttosto che aggressori occasionali. –

+1

Hai ragione su questi punti. Un modo per aumentare ulteriormente la sicurezza del sistema consiste nell'utilizzare sia il token SSL che un token di sicurezza e rendere il token derivato da un fattore esterno all'applicazione, come una password nota solo all'utente autorizzato (deve essere considerata la sicurezza appropriata per il bilanciamento dell'usabilità) . Si noti che la funzione utilizzata per derivare token deve essere a senso unico. Il proxy garantisce una maggiore sicurezza consentendo di limitare o bloccare le richieste, ponendo quindi un limite superiore alle spese che un utente malintenzionato può sostenere nel proprietario del sistema entro un determinato intervallo di tempo. –

+1

Mi ci sono voluti alcuni minuti per ottenere il tuo punto qui, ma sono d'accordo. Se riesci a legare il token "per favore lascia che ti parli" a una informazione specifica dell'utente (come un account), puoi limitare fortemente l'abuso. Se non puoi, allora puoi limitare debolmente l'abuso tramite la limitazione basata su IP. –

1

Ignorando il fatto che le persone che effettuano il jailbreak dei propri dispositivi potrebbero guardare la tua applicazione, credo che sia possibile esaminare il traffico come qualsiasi altro dispositivo (laptop, tablet, ecc.) Se qualcuno stia annusando il traffico su un hotspot WiFi usando applicazioni come WireShark. Tuttavia, dubito che ci sarebbe molto rischio su una rete 3G cellulare.

1

Buona domanda.

Come molti hanno già detto, sì, è facile capire gli URL richiesti dall'app.

Nota su HTTPS: Ma dal momento che si utilizza HTTPS si sta bene perché su HTTPS del dominio sarà oscurato per l'indirizzo IP, e la gente non può vedere i parametri di stringa di query URL. Ad esempio, se il tuo URL era https://somewebsite.com?uid=mylogin&pass=mypass, sicuramente non sarà in grado di visualizzare "uid = mylogin & pass = mypass" e probabilmente potranno visualizzare solo l'indirizzo IP, non il nome di dominio stesso.(Vedi https://serverfault.com/questions/186445/can-an-attacker-sniff-data-in-a-url-over-https)

Nota a margine: potrebbe essere lecito ritenere che Apple esegue una sorta di diagnosi richiesta HTTP quando esaminano la vostra applicazione - che avrebbe senso, perché è nel loro interesse per cercare di capire cosa la tua app funziona da molti punti di vista.

3

L'utilizzo di URL semplici è un modo sicuro per far sì che gli script kiddies non ti portino fuori dal mercato. Se non è possibile monitorare se una chiamata al costoso servizio Web è legittima, impostare il proprio servizio Web che si trova di fronte al servizio Web reale per assicurarsi che il proprio servizio Web possa verificare la legittimità della chiamata prima di inoltrare il servizio. richiesta per il vero servizio web.

Problemi correlati