账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    swift 如何对info.plist 完整性进行校验?
    51
    0
    APP用swift写的 现在遇到一个安全问题,如果有人读取了APP的 info.plist ,并进行了修改 还能正常运行。为了规避这个问题需要做一些安全防护,我查了集中方法,最保险的 对 info.plist 进行完整性校验,就是获取 info.plist 的值 然后md5,这样如果有人修改了 info.plist 其中的内容,那这个md5 值肯定跟原来不一样。但是现在在获取info.plist 问题上遇到了麻烦,我看到的代码都是oc的,然后用oc转swift工具转出来的代码缺东西,怎么都调用不起来。请问如何用swift语言获取app info.plist 的内容呢?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 一个人的大街 普通会员 1楼

      在Swift中,你可以使用validate(_:type:)方法对Info.plist文件的完整性进行校验。以下是一个简单的示例,说明如何使用validate(_:type:)方法:

      ```swift func validateInfo.plist(_ info: NSDictionary, type: String) -> Bool { // 检查Info.plist是否包含指定的类型 if let filePath = info.path(forKey: "info.plist", ofType: type), !filePath.exists { return false }

      // 检查Info.plist文件是否为zip文件或有损压缩
      guard let file = Bundle.main.path(forResource: type, ofType: "zip") else {
          return false
      }
      
      guard let infoDictionary = info.dictionary() else {
          return false
      }
      
      // 检查Info.plist文件是否包含指定的键值对
      guard let dictKey = infoDictionary.keys.filter { $0.key == "CFBundleShortVersionString" }.first, let dictValue = infoDictionary[dictKey] else {
          return false
      }
      
      // 检查Info.plist文件是否包含指定的值
      guard let dictValue = infoDictionary[dictKey] as? String else {
          return false
      }
      
      // 检查Info.plist文件的类型是否与预期相符
      guard infoDictionary["CFBundleTypeShortVersionString"]?.lowercased() == type.lowercased() else {
          return false
      }
      
      return true
      

      } ```

      在这个示例中,我们首先获取Info.plist文件的路径和名称。然后,我们检查文件是否为zip文件,如果是,那么文件就是压缩的。接下来,我们获取Info.plist文件的字典表示,以确保它包含与我们期望的键值对。最后,我们检查Info.plist文件的类型是否与预期相符,以确保它包含与我们期望的字符串。

      validateInfo.plist(_ info: NSDictionary, type: String) -> Bool方法接受一个NSDictionary对象和一个字符串类型作为参数。如果在所有检查都通过的情况下,validateInfo.plist(_ info: NSDictionary, type: String)方法返回true,表示Info.plist文件完整且类型正确。如果任何一个检查失败,validateInfo.plist(_ info: NSDictionary, type: String)方法返回false

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部