安全编码-如何在Xcode Project中保护您的安全信息

有时,在调试/构建应用程序时,我们可能需要在源代码中保留敏感信息。 它可以是密码,用户名,令牌,客户端ID,秘密值等

我们需要确保这些信息的安全性,以便您的开发团队以外的其他任何人都无法使用。 Apple iOS构建包机制是如此强大且安全,因此通常人们无法轻易地从appstore构建中提取源代码。

但是我们仍然不安全,因为开发人员使用git或任何其他存储库来处理其源代码。 在提交更改时,这些敏感信息也会随之发送。 这些数据可以随时被破坏。 在某些项目中,安全信息会保存在后端系统中,并在打包时与应用程序捆绑在一起。

无论如何,这里我将讨论一种简单的方法来确保您的敏感信息在Xcode项目中的安全。

创建一个名为Secrets.swift的快速文件,并添加一些常量(这是保存所有敏感信息的单个文件)

下一步,打开终端,然后移至创建Secrets.swift文件的文件夹。

  $ cd /用户/文档/工作区/ SecretApp / SecretApp / 

使用openssl有许多可用的加密方法。 您可以在下面的行中输入其他有效的密码名称值

  $ openssl enc -h 

在我们的示例中,我们使用AES-256加密。 现在在终端中输入以下行,然后按Enter

  $ openssl enc -aes-256-cbc -salt -in Secrets.swift -out Secrets.swift.enc 

将会询问: 输入aes-256-cbc加密密码:

输入有效的密码来保护文件。 按下Enter键后,系统会要求您再次确认密码。 再次输入相同的密码,然后按Enter。

现在,如果您查看创建Secrets.swift的文件夹, 可以看到另一个创建的文件: Secrets.swift.enc 。 该文件将是我们的安全加密文件。

接下来,创建一个空的txt文件(将其命名为Script)并将其保存在.xcodeproj文件所在的文件夹中。 打开文件夹,然后将文件重命名为Script.sh 。 系统将要求您确认更改

单击按钮Use.sh

现在,在文本编辑器中打开Script.sh文件,然后在下面的行中键入。

  #!  / bin / bash 
  openssl enc -aes-256-cbc -d -in $ {SRCROOT} /SecretApp/Secrets.swift.enc -out $ {SRCROOT} /SecretApp/Secrets.swift -pass pass: 

< ENTER_ENCRYPTION_PASSWORD>替换为您的加密密码并保存文件。

打开终端并更改Script.sh文件的权限。 从Script.sh所在的同一文件夹中的终端输入以下行。

  $ chmod 777 Script.sh 

打开Xcodeproject并单击目标,然后选择Build Phase

单击加号按钮,然后选择新建运行脚本阶段

将添加“运行脚本”部分。 在指定区域的行下方键入。

 如果[“ $ {CONFIGURATION}” =“ Debug”]; 然后 
  “ $ {SRCROOT} /script.sh” 
 科幻 

将“ 运行脚本”部分放在“ 编译源 部分上方非常重要。

现在运行项目,并确保没有构建/编译错误。

接下来,从文件夹而不是项目中删除Secret.swift文件(这将使文件在项目中显示为红色,但是可以)。

清理并再次运行xcode项目,并确保自动创建Secret.swift文件。

下一步非常重要。

不要提交Secrets.swift和script.sh文件

打开 gitignore文件(将.git文件放置在同一位置。如果不存在,请创建一个。)并添加带有扩展名的文件名。

Secrets.swiftScript.sh

现在,您可以将所有其他更改和文件提交到git存储库。

Secrets.swifScript.sh文件将仅保留在本地系统中,而不保留在远程存储库中。

团队中的其他开发人员必须获取Script.sh文件的副本,并将其放置在完全相同的位置(与xcodeproject相关)。

如果使用的是TeamCity或Jenkin等任何持续集成工具,则必须在构建步骤之前添加解密步骤(Script.sh)。

完整的源代码可在github中找到: https : //github.com/rajeshbeats/secret-app

克隆源代码后,您必须添加Script.sh文件,并且在首次运行它时也会显示错误— 错误:无法找到构建输入文件:’/ Users / ramachr1 / Desktop / secr / secret-app / SecretApp / Secrets.swift。 但是,请忽略它并再次运行(这是因为它是第一次创建丢失的Secrets.swift文件)

脚注

在上述方法中,我们可以使用mac钥匙串方法代替加密来安全地保留敏感信息。 在我将来的文章中将提供更多有关该细节的信息。

此外,还有其他一些行业认可的方法来保护源代码文件,但是这需要更多的精力和其他工具的集成。 在此提及其中之一以供参考:http://github.com/StackExchange/blackbox

快乐的安全编码人员🙂