苹果沙盒机制详解

皮肤图鉴

基本介绍沙盒(SandBox)是IOS的一个防御机制,每个应用都会有一个自己的沙盒,应用只能在自己的沙盒目录下读写数据,应用A不能访问应用B的沙盒,他们之间是相互隔离的,正因为如此攻击者在上传恶意程序后即时侥幸的通过了App Store的审核被安装到用户的手机之后也不能获取其他应用的数据,当然在在用户授权的情况下应用也可以访问其他目录下面的文件,比如:用户授权情况下应用可以访问相册、通讯录,在开发中经常会涉及到iOS沙盒目录,比如:读写文件,归档解档等

沙盒目录iOS的沙盒目录是每个应用程序在iOS设备上分配的私有文件系统空间,用于存储应用程序的数据和文件,每个应用程序都有其独立的沙盒目录,其他应用程序无法直接访问其中的内容,下面是获取iOS沙盒目录的方法

手动检索(1) Documents目录

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/Documents/

目录用途:存储应用程序创建的用户数据和文件,例如:文档、用户生成的媒体内容等,这些文件会被备份到iCloud

(2) Library目录

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/Library/

a、Caches

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/Library/Caches/

主要作用:存储应用程序的缓存文件,例如:临时下载文件、图片缓存等,这些文件不会被备份到iCloud,并可能在设备存储空间不足时被系统清理

b、Preferences

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/Library/Preferences/

主要作用:存储应用程序的偏好设置文件,例如:用户设置、配置信息等

c、Application Support

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/Library/Application Support/

主要作用:存储应用程序的持久化数据,例如:数据库文件、配置文件等

d、Logs

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/Library/Logs/

主要作用:存储应用程序的日志文件,用于调试和故障排查

(3) Tmp目录:

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/tmp/

主要用途:存储应用程序的临时文件,例如:下载的临时文件、缓存文件等,这些文件可能在应用程序被关闭后被清理,不会被备份到iCloud

(4) systemData目录

目录路径:/var/mobile/Containers/Data/Application/{App-UUID}/systemData/

主要用途:SystemData 目录是一个系统级别的目录,用于存储与操作系统相关的数据和文件

(5) 包内资源目录

目录路径:应用程序的主包内

主要用途:存储应用程序的资源文件,例如:图像、音频、视频、配置文件等,这些文件在应用程序安装后不可更改并受到应用程序签名的保护

模拟器类Mac为IOS开发人员提供的Xcode自带模拟器,我们使用其进行IOS开发时可以直接通过以下方式来获取到本地的沙盒文件,比较特殊的是其沙盒文件在个人username目录下的一个隐藏目录里,中文叫资源库,事实上就是Library,在查看之前我们先要在终端中执行如下命令来设置查看隐藏文件的方法

代码语言:javascript复制#显示Mac隐藏文件的命令

defaults write com.apple.finder AppleShowAllFiles -bool true

#隐藏Mac隐藏文件的命令

defaults write com.apple.finder AppleShowAllFiles -bool false随后鼠标单击窗口左上角的苹果标志-->强制退出-->Finder

随后即可看到资源库文件目录:

打开资源库后找到"Developer/CoreSimulator/Devices/设备标识符/data/"

这里的资源库即对应着Library

程序查看我们可以在Xcode中通过以下代码的方式来检索对应的沙盒目录文件:

代码语言:javascript复制//

// ViewController.m

// testSandbox

//

// Created by exchen on 2018/4/8.

// Copyright © 2018年 exchen. All rights reserved.

//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

-(void)getPath{

//获取沙盒根目录路径

NSString*homeDir = NSHomeDirectory();

NSLog(@"homedir: %@",homeDir);

// 获取Documents目录路径

NSString*docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject];

NSLog(@"docDir: %@",docDir);

//获取Library的目录路径

NSString*libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) lastObject];

NSLog(@"libDir: %@",libDir);

// 获取cache目录路径

NSString*cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) firstObject];

NSLog(@"cachesDir: %@",cachesDir);

// 获取tmp目录路径

NSString*tmpDir =NSTemporaryDirectory();

NSLog(@"tmpDir: %@",tmpDir);

//获取应用的自身 xx.app 目录

NSBundle *bundle = [NSBundle mainBundle];

NSString *strAppPath = [bundle bundlePath];

NSLog(@"appDir: %@",strAppPath);

}

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[self getPath];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end输出结果如下:

代码语言:javascript复制2023-09-04 23:23:19.714652+0530 testSandbox[1710:40573] homedir: /Users/Ring001/Library/Developer/CoreSimulator/Devices/00A9F66B-8D0B-4485-B4D2-E435F023A8EE/data/Containers/Data/Application/F321B8D8-29C3-4A5F-954A-08EB84D1C3A3

2023-09-04 23:23:19.715165+0530 testSandbox[1710:40573] docDir: /Users/Ring001/Library/Developer/CoreSimulator/Devices/00A9F66B-8D0B-4485-B4D2-E435F023A8EE/data/Containers/Data/Application/F321B8D8-29C3-4A5F-954A-08EB84D1C3A3/Documents

2023-09-04 23:23:19.715615+0530 testSandbox[1710:40573] libDir: /Users/Ring001/Library/Developer/CoreSimulator/Devices/00A9F66B-8D0B-4485-B4D2-E435F023A8EE/data/Containers/Data/Application/F321B8D8-29C3-4A5F-954A-08EB84D1C3A3/Library

2023-09-04 23:23:19.719813+0530 testSandbox[1710:40573] cachesDir: /Users/Ring001/Library/Developer/CoreSimulator/Devices/00A9F66B-8D0B-4485-B4D2-E435F023A8EE/data/Containers/Data/Application/F321B8D8-29C3-4A5F-954A-08EB84D1C3A3/Library/Caches

2023-09-04 23:23:19.720372+0530 testSandbox[1710:40573] tmpDir: /Users/Ring001/Library/Developer/CoreSimulator/Devices/00A9F66B-8D0B-4485-B4D2-E435F023A8EE/data/Containers/Data/Application/F321B8D8-29C3-4A5F-954A-08EB84D1C3A3/tmp/

2023-09-04 23:23:19.721101+0530 testSandbox[1710:40573] appDir: /Users/Ring001/Library/Developer/CoreSimulator/Devices/00A9F66B-8D0B-4485-B4D2-E435F023A8EE/data/Containers/Bundle/Application/55F7F1CA-107D-48F4-9121-F078447B4451/testSandbox.app文末小结

本篇文章主要介绍了苹果的沙盒机制~