有谁知道是否有办法找出在沙箱下是否可以访问特定文件系统位置?
我想测试在正常的 Powerbox 规则下是否可以访问特定文件;已经使用打开/保存对话框等添加到电源盒中。
我可以在触发沙盒异常之前执行此操作吗?
我可以捕获沙盒异常吗?
最好的祝福,
坦率
有谁知道是否有办法找出在沙箱下是否可以访问特定文件系统位置?
我想测试在正常的 Powerbox 规则下是否可以访问特定文件;已经使用打开/保存对话框等添加到电源盒中。
我可以在触发沙盒异常之前执行此操作吗?
我可以捕获沙盒异常吗?
最好的祝福,
坦率
您可以使用 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;
}
一些东西。当您需要路径字符串时,请始终使用 fileSystemRepresentation。此外,如果您只想知道指定路径的沙箱中是否存在漏洞,R_OK 就足够了。
-(BOOL)isAccessibleFromSandbox:(NSString*)path
{
return( access( path.fileSystemRepresentation, R_OK) == 0 );
}