10

有谁知道是否有办法找出在沙箱下是否可以访问特定文件系统位置?

我想测试在正常的 Powerbox 规则下是否可以访问特定文件;已经使用打开/保存对话框等添加到电源盒中。

我可以在触发沙盒异常之前执行此操作吗?

我可以捕获沙盒异常吗?

最好的祝福,

坦率

4

2 回答 2

11

您可以使用 OSaccess()系统调用进行快速简单的测试,来自man access

#include <unistd.h>

int access(const char *path, int amode);

access() 函数检查由 path 命名的文件的可访问性,以获得 amode 指示的访问权限。amode 的值是要检查的访问权限(R_OK 表示读取权限,W_OK 表示写入权限,X_OK 表示执行/搜索权限)或存在性测试 F_OK 的按位或。检查路径名路径的所有组件的访问权限(包括 F_OK)。

如果找不到路径或任何所需的访问模式不会被授予,则返回 -1 值并设置全局整数变量 errno 以指示错误。否则,返回 0 值。

您可以使用以下内容为 Objective-C 美化这个:

typedef enum
{
   ReadAccess = R_OK,
   WriteAccess = W_OK,
   ExecuteAccess = X_OK,
   PathExists = F_OK
} AccessKind;


BOOL isPathAccessible(NSString *path, AccessKind mode)
{
   return access([path UTF8String], mode) == 0;
}
于 2012-05-09T10:46:57.830 回答
3

一些东西。当您需要路径字符串时,请始终使用 fileSystemRepresentation。此外,如果您只想知道指定路径的沙箱中是否存在漏洞,R_OK 就足够了。

-(BOOL)isAccessibleFromSandbox:(NSString*)path
{
    return( access( path.fileSystemRepresentation, R_OK) == 0 );
}
于 2013-12-10T05:37:18.597 回答