【发布时间】:2012-03-09 09:10:16
【问题描述】:
如果我有一个用于远程 SSL 身份验证的密码变量,存储在源代码中是否安全?
例如
NSString * password = @"password";
有没有更好的办法?
更新:对不起,我不存储用户密码,而是存储一个密码,用于调用我们自己的后端,所有应用程序将使用相同的密码。
【问题讨论】:
标签: iphone objective-c ios xcode ipad
如果我有一个用于远程 SSL 身份验证的密码变量,存储在源代码中是否安全?
例如
NSString * password = @"password";
有没有更好的办法?
更新:对不起,我不存储用户密码,而是存储一个密码,用于调用我们自己的后端,所有应用程序将使用相同的密码。
【问题讨论】:
标签: iphone objective-c ios xcode ipad
我的新答案:
尽量不要使用静态密码访问后端。如果您不想要的人确定该密码是什么,会发生什么。为什么不使用用户名和密码?
您还可以考虑使用公钥或嵌入式证书,仅允许您的应用访问后端服务器。
我原来的回答:
听起来你想了解钥匙串。
这是一个讨论它的教程:
http://maniacdev.com/2011/07/tutorial-how-to-use-the-ios-keychain-to-store-names-and-passwords/
还有here is a related question that talks about the security of Keychain under iOS。
您不应该让程序为所有用户存储静态密码,而是让每个用户设置他/她的帐户和密码以进行身份验证,然后存储 钥匙串里的东西。
【讨论】:
您的应用程序中包含的任何文本都可以轻松提取。没有真正的解决方法 - 使用strings 工具,任何人都可以看到任何和所有静态嵌入到您的应用程序中的文本内容。但是,有一些方法可以解决这个问题 - 特别是,如果您将字符串拆分为几个静态字符串并以正确的顺序连接,则对应用程序中包含的密码进行逆向工程将更加困难。
我建议您查看一个类似的问题 (How Safe is Information Contained within iPhone App Compiled Code),特别是我对该问题的回答,以更深入地解释我的意思。 (Nimrod 对这个问题的评论也很有趣。)
【讨论】:
不!
构建您的应用程序。转到终端并输入strings,然后将您的可执行文件拖到终端并按回车键...您将看到您的 secret 纯文本密码:)
你应该存储它的哈希值。
【讨论】:
strings 终端,但它一直在加载,什么都看不到..