2012-03-09 45 views
2

如果我有一个用于远程SSL认证的密码变量,那么存储在源代码中是否安全?保护Objective C源代码中的敏感信息

例如

NSString * password = @"password"; 

有没有更好的办法?

更新:对不起,我的困惑,我不存储用户密码,而不是,我存储用来调用我们自己的后台密码,所有的应用程序将使用相同的密码。

回答

2

我的新的答案:

尽量不要使用静态密码来访问后端,期。如果某人不想确定密码是什么,会发生什么情况。为什么不使用用户名&密码?

您还可以考虑使用公钥或嵌入式证书,以便只允许您的应用访问后端服务器。

我原来的答复:

听起来像是你想结识的钥匙扣。

下面是谈论它的教程:

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

你不应该有计划为所有用户储存静态密码,而是让每个用户设定他/她的账户&密码进行验证,然后储存东西在钥匙串。

+0

我已经更新了我的问题,我没有存储用户密码,而是我正在存储密码来调用我们的后端,用户不知道它。 – Howard 2012-03-09 09:27:54

+0

如果你原来的问题比较清楚,那本来很好。我已经修改了我的答案。 – 2012-03-09 09:39:13

+0

谢谢!但即使使用公钥,用户也很容易检测到,我只是想,如果有更好的方法将其隐藏在代码中的某处。我不需要有一个完美的方式来做到这一点,只是比存储一个字符串更好。 – Howard 2012-03-09 09:52:22

0

不!

建立你的应用程序。转至终端输入strings,然后你的可执行文件拖动到终端,然后按返回......你会以纯文本格式见你秘密密码:)

你应该保存它的哈希值。

+0

我已经将可执行文件拖放到了'strings'终端,但它一直在加载,没有任何东西可以被看到。 – Howard 2012-03-09 09:50:46

1

应用程序中包含的任何文本都很容易提取。有没有真正的解决方法 - 使用strings工具,任何人都可以看到静态嵌入到您的应用程序中的任何和所有文本内容。但是,有一些解决方法 - 特别是,如果将字符串拆分为多个静态字符串并按正确的顺序进行连接,则对应用程序中包含的密码进行反向工程将会困难得多。

我建议你看看类似的问题(How Safe is Information Contained within iPhone App Compiled Code),特别是我对这个问题的回答,以便更深入地解释我的意思。 (尼姆罗德对这个问题的评论也很有意思。)