【问题标题】:Protecting sensitive information in Objective C source code保护 Objective C 源代码中的敏感信息
【发布时间】:2012-03-09 09:10:16
【问题描述】:

如果我有一个用于远程 SSL 身份验证的密码变量,存储在源代码中是否安全?

例如

NSString * password =  @"password";

有没有更好的办法?

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

【问题讨论】:

    标签: iphone objective-c ios xcode ipad


    【解决方案1】:

    我的新答案:

    尽量不要使用静态密码访问后端。如果您不想要的人确定该密码是什么,会发生什么。为什么不使用用户名和密码?

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

    我原来的回答:

    听起来你想了解钥匙串。

    这是一个讨论它的教程:

    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

    您不应该让程序为所有用户存储静态密码,而是让每个用户设置他/她的帐户和密码以进行身份​​验证,然后存储 钥匙串里的东西。

    【讨论】:

    • 我已经更新了我的问题,我没有存储用户密码,而是存储了一个密码来调用我们的后端,用户不知道它。
    • 如果您的原始问题一开始就更清楚一点,那就太好了。我已经修改了答案。
    • 谢谢!但是即使使用公钥,用户是否容易检测到,我只是在想是否有更好的方法可以将其隐藏在代码中的某个位置。我不需要一个完美的方法来做到这一点,只要比存储为字符串就可以了。
    • @Howard:我也遇到了同样的问题。你有没有办法在你的代码中隐藏字符串?
    【解决方案2】:

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

    我建议您查看一个类似的问题 (How Safe is Information Contained within iPhone App Compiled Code),特别是我对该问题的回答,以更深入地解释我的意思。 (Nimrod 对这个问题的评论也很有趣。)

    【讨论】:

      【解决方案3】:

      不!

      构建您的应用程序。转到终端并输入strings,然后将您的可执行文件拖到终端并按回车键...您将看到您的 secret 纯文本密码:)

      你应该存储它的哈希值。

      【讨论】:

      • 我已将可执行文件拖入strings 终端,但它一直在加载,什么都看不到..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 2022-12-11
      相关资源
      最近更新 更多