【问题标题】:Best Approach for maintaining configuration safely安全维护配置的最佳方法
【发布时间】:2018-09-01 22:37:37
【问题描述】:

概述:

我有一个 iOS 项目,其中包含 Plist 中的服务器配置。我对不同的目标(开发/阶段等)有不同的 plist

问题:

这个 plist 被复制到主包中,所以我觉得它不是那么安全,因为可以从 ipa 文件中获取它。我希望它无法访问。

问题:

  • 为不同目标维护服务器配置的最佳方法是什么?
  • 如果可以使用 plist,如何使其无法通过 ipa 文件访问,但可以通过代码读取?
  • 有没有更好的方法来解决这个问题?

【问题讨论】:

  • “我希望它无法访问。”这是不可能的。您需要做出一些选择:您想要访问它的难度与您愿意为此付出多少努力。付出巨大的努力,您应该可以在几个小时内阻止熟练的攻击者。通过适度的努力,您应该期望停止自动脚本。 (通过大量的努力和费用,您可能能够在几周或几个月内阻止熟练且积极主动的攻击者。)您保护这些信息的预算是多少?
  • @RobNapier 我的预算是几百美元和大约 1 周的编码时间。这是一个快速的应用程序
  • 这是一个快速的应用程序
  • 在这里查看我最近一次演讲中的幻灯片/笔记和一些工具。这是一个非常复杂的话题。 github.com/rnapier/secrets
  • 非常感谢,我会看看它,如果我有任何疑问,请告诉您。

标签: ios plist


【解决方案1】:

您可以通过硬编码配置来避免使用 plist。通过这种方式,它被编译到应用程序中,并且不容易通过 ipa 文件访问。它并不完全安全,但比 plist 更难访问。

创建文件MyConfigDev.swift

// this file is added to the Dev target
class Config {
    private init() {}
    static let shared = Config()
    let myParam = "valueForDev"
}

还有另一个文件MyConfigStaging.swift

// this file is added to the Staging target
class Config {
    private init() {}
    static let shared = Config()
    let myParam = "valueForStaging"
}

如果您构建 Dev 目标,则使用文件 MyConfigDev.swift,如果您构建 Staging 目标,则使用文件 MyConfigStaging.swift

在您的代码中,您可以访问配置:

let p = Config.shared.myParam

要访问您的配置,黑客现在需要反编译您的 ipa。

【讨论】:

  • 不需要反编译 IPA。通过在应用程序二进制文件上运行 strings 可以轻松提取这些字符串。它比阅读 plist 稍微难一些,但也不难。 (不过,这可能足以让 OP 放心,所以这是向前迈出的一步。)
  • 感谢 Peter,这绝对比 plist 选项更好,并且可以使用活动编译标志(构建设置)来区分不同的环境。
  • @RobNapier 有没有比使用字符串更好的方法?
  • 这是一个快速应用程序,只是为了给问题添加一些上下文
猜你喜欢
  • 2014-10-13
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
相关资源
最近更新 更多