将iPhone应用程序的httpsencryption保护到网页
我想卖一个iPhone应用程序,将一个网页视图网页,说http://www.myapp.com/webview/我希望应用程序有效地存储身份validation所需的凭据在网站(即只有购买了应用程序的人才能查看此页面)
我还有什么可以在iPhone上获得安全,简单的webview,而不需要用户login(实质上他们购买应用程序将构成他们对页面的身份validation)
任何人都可以帮忙吗?
没有绝对的办法来实现这个目标。 如果您有一个使用共享凭证(绑定在应用程序中)的Web服务,则可以对该凭证进行逆向工程。 最终,确保在另一台机器上运行的客户端是“您的”客户端是不可能的。
这个有很多的讨论。 这不是没有希望,只有100%(甚至90%)才能解决。 SSL上的一个简单的共享密钥将会阻止大多数攻击者,而不会损害用户的利益,也不会花费太多的开发费用。 这是混淆,而不是安全,但便宜和“最有效的”比昂贵和“最有效的”要好得多。
如果你有一个非常高价值的产品,那么它可能需要更积极(昂贵)的解决scheme。 所有这些解决scheme都包括以下两件事情之一:
- authentication用户而不是程序,或者
- 不断提高警惕,注意新的攻击和修复补丁。
后者是非常昂贵的,永远不会结束。 确保它是值得的。
其他一些有用的讨论:
- 反盗版和应用程序识别。 iPhone SDK
- 最简单的方法来限制可执行文件在某台计算机上运行
- 反编译Objective-C库
- 混淆cocoa
编辑我想指出一件关于我提到的“SSL上的共享密钥”。 请记住,如果您不validation证书,您将受到非常容易的中间人攻击。 像Charles这样的可用代理可以做到这一点。 最好的方法是确保返回的SSL证书由您的根证书签名,而不仅仅是“任何可信证书”。 您可以使用SecTrustSetAnchorCertificates()
重新configuration应用程序信任哪些证书。 iOS5:PTL在第11章(第221页)中介绍了这种技术。 我也把它包装到一个名为RNPinnedCertValidator的库中。
另一个好的方面是实现一个质询 – 响应系统,服务器validation客户端是否拥有共享密钥,而不必将其放在networking上。 维基百科关于Challenge-resonseauthentication的文章包含了对algorithm的很好的解释。