2012-02-07 9 views
8

voglio vendere un applicazione per iPhone, che ospiterà una singola vista web a una pagina Web, dico http://www.myapp.com/webview/ vorrei l'applicazione per memorizzare in modo efficace le credenziali richieste per l'autenticazione al sito web (cioè solo chi ha acquistato l'app può visualizzare questa pagina)crittografia Secure https per iPhone alla pagina web

In quale altro modo avrei una webview sicura e semplice su iPhone, senza richiedere all'utente di effettuare l'accesso (in sostanza, l'acquisto dell'applicazione costituirà la loro autenticazione per pagina)

Qualcuno può aiutare con questo?

+0

Dovresti davvero accettare la risposta qui sotto. È molto buono. –

risposta

18

Non esiste un modo assoluto per raggiungere questo obiettivo. Se si dispone di un servizio Web che utilizza credenziali condivise (una in bundle nell'applicazione), sarà possibile decodificare tali credenziali. In definitiva è impossibile garantire che un client in esecuzione su un'altra macchina sia il "tuo" cliente.

Ci sono state molte discussioni su questo. Non è senza speranza, solo impossibile risolvere il 100% (o anche il 90%). Un semplice segreto condiviso su SSL fermerà la maggior parte dei tuoi attaccanti senza danneggiare gli utenti o costare molto a sviluppare. È offuscamento, non sicurezza, ma economico e "per lo più efficace" è molto meglio che costoso e "per lo più efficace".

Se si dispone di un prodotto di valore molto elevato, potrebbe richiedere soluzioni più aggressive (costose). Tutte queste soluzioni includono una delle due cose:

  • autenticare l'utente, piuttosto che il programma, o
  • continua vigilanza, guardando per nuovi attacchi e rispondendo con correzioni che loro patch.

Quest'ultimo è molto costoso e non finisce mai. Assicurati che ne valga la pena.

Alcune altre discussioni utili:


EDIT Volevo sottolineare una cosa sulla mia menzione di "segreto condiviso su SSL". Ricorda che se non si verifica il certificato, si è soggetti a attacchi man-in-the-middle molto facili. Proxy prontamente disponibili come Charles possono farlo. L'approccio migliore consiste nel verificare che il certificato SSL che viene restituito sia firmato da il certificato radice, non solo "qualsiasi certificato attendibile". È possibile riconfigurare quali certificati sono considerati affidabili dall'applicazione con SecTrustSetAnchorCertificates(). iOS5:PTL copre questa tecnica nel Capitolo 11 (pagina 221). L'ho anche spostato in una libreria chiamata RNPinnedCertValidator.

Un altro buon livello è quello di implementare un sistema di risposta alle sfide in cui il server autentica che il client ha il segreto condiviso senza mai metterlo sul filo. L'articolo di Wikipedia su Challenge-resonse authentication include una buona spiegazione dell'algoritmo.

+0

Ottima risposta, grazie. –

+0

Modificato per includere come mitigare il problema dello sniffing SSL. –

Problemi correlati