启用UIFilesharingEnabled后如何限制sqlite.db文件的访问?
好问题!当你开启UIFilesharingEnabled后,App的Documents目录会对用户和其他有权限的应用可见,这确实会带来敏感数据暴露的风险。针对你的SQLite数据库文件,这里有几个靠谱的解决办法:
迁移数据库到非共享目录
iOS系统提供了多个不对外共享的目录,比如Library/Application Support或Library/Caches。把你的sqlite.db文件移到这些目录下,既能保证App正常访问数据,又不会被文件共享功能暴露。注意:
Library/Caches目录可能会在设备存储空间不足时被系统自动清理,所以如果是用户的重要业务数据,优先选择Library/Application Support目录,记得在使用前先检查并创建该目录(如果它不存在的话)。加密SQLite数据库
如果业务需求要求数据库必须留在Documents目录,那一定要给数据库加密。SQLite本身支持加密扩展,你可以使用SQLCipher这类成熟的库,给数据库设置一个只有你的App知晓的密钥。每次打开数据库时都需要验证密钥,就算文件被获取到,没有密钥也无法读取其中的内容。设置严格的文件权限
你可以通过修改文件系统权限来限制其他主体的访问。使用chmod命令或者NSFileManager的相关API,将sqlite.db文件的权限设置为0600——这个权限意味着只有当前App的所有者拥有读写权限,其他用户和应用都无法访问。不过要注意,开启文件共享后Documents目录的默认权限可能会削弱这个设置的效果,所以建议结合前面的方法一起使用。禁用文件共享(如果业务允许)
如果你的App根本不需要文件共享功能,最彻底的办法就是直接在Info.plist中将UIFilesharingEnabled设置为false。这样整个Documents目录都会对外隐藏,从根源上解决数据暴露问题。
内容的提问来源于stack exchange,提问作者Parth Rathod

