2012-02-07 10 views
8

Quiero vender una aplicación para iPhone, que albergará una única vista web a una página web, digamos http://www.myapp.com/webview/ Me gustaría que la aplicación almacene efectivamente las credenciales necesarias para la autenticación en el sitio web (es decir, solo alguien que haya comprado la aplicación puede ver esta página)Encriptación segura de https para la aplicación iPhone a la página web

¿De qué otra forma podría tener una vista web segura y sencilla en el iPhone, sin requerir que el usuario inicie sesión (básicamente, la compra de la aplicación constituirá su autenticación al página)

¿Alguien puede ayudar con esto?

+0

Realmente debería aceptar la respuesta a continuación. Es muy bueno. –

Respuesta

18

No hay una manera absoluta de lograr este objetivo. Si tiene un servicio web que usa una credencial compartida (una incluida en la aplicación), entonces será posible realizar una ingeniería inversa de esa credencial. En última instancia, es imposible garantizar que un cliente que se ejecuta en otra máquina sea "su" cliente.

Ha habido muchas discusiones sobre esto. No es imposible, solo imposible de resolver al 100% (o incluso al 90%). Un simple secreto compartido sobre SSL detendrá a la mayoría de sus atacantes sin dañar a sus usuarios o costando mucho para desarrollarse. Es ofuscación, no seguridad, pero es barata y "en su mayor parte efectiva" es mucho mejor que costosa y "en su mayoría efectiva".

Si tiene un producto de muy alto valor, entonces puede garantizar soluciones más agresivas (costosas). Todas estas soluciones incluyen una de dos cosas:

  • Autenticación del usuario en lugar del programa, o
  • una vigilancia continua, en busca de nuevos ataques y responder con correcciones que taparlos.

Este último es muy caro y nunca termina. Asegúrate de que valga la pena.

Algunas otras discusiones útiles:


EDITAR Quería señalar una cosa sobre mi mención de "secreto compartido sobre SSL". Recuerde que si no verifica el certificado, está sujeto a ataques de hombre en el medio muy fáciles. Los proxies fácilmente disponibles como Charles pueden hacer esto. El mejor enfoque es asegurarse de que el certificado SSL que se devuelve esté firmado por su certificado raíz, no solo como "cualquier certificado confiable". Puede reconfigurar en qué certificados confía su aplicación con SecTrustSetAnchorCertificates(). iOS5:PTL cubre esta técnica en el Capítulo 11 (página 221). También envolví esto en una biblioteca llamada RNPinnedCertValidator.

Otra buena capa es implementar un sistema de desafío-respuesta donde el servidor autentica que el cliente tiene el secreto compartido sin tener que ponerlo en el cable. El artículo de Wikipedia en Challenge-resonse authentication incluye una buena explicación del algoritmo.

+0

Gran respuesta, gracias. –

+0

Editado para incluir cómo mitigar el problema del rastreo de SSL. –

Cuestiones relacionadas