如何在React Native应用中保护已捕获或下载的媒体文件安全

实现方案
以下是iOS、Android双端实现应用内文件仅本应用可访问的具体操作:
iOS端
- 存储路径选择应用沙盒内的
Library/Application Support目录,禁止将敏感文件存入Documents目录 - 打开项目Info.plist配置,将以下两个字段的值设为
NO:UIFileSharingEnabled(Application supports iTunes file sharing)LSSupportsOpeningDocumentsInPlace(Supports opening documents in place)
关闭后应用内文件不会出现在系统「文件」App的对应应用目录下,也不会被iTunes、iExplorer等工具直接读取
- 所有视频、音频、图片类文件不要主动加入系统媒体库索引,避免出现在系统相册、播放器列表中
- 高敏感文件可额外做AES-256加密存储,读取时实时解密,即使设备越狱也无法直接打开文件
Android端
- 所有文件存储到应用专属内部存储目录,通过
context.getFilesDir()(持久存储)、context.getCacheDir()(缓存存储)获取路径,该目录默认仅当前应用拥有读写权限,其他应用包括文件管理器都无法访问,也无需申请任何存储权限 - 禁止将文件存储到外部公共存储路径,包括
/sdcard、Environment.getExternalStorageDirectory()等路径下,公共存储下的文件可被其他拥有存储权限的应用读取 - 不要主动发送
MEDIA_SCANNER_SCAN_FILE广播触发系统媒体库扫描,避免应用内媒体文件出现在系统相册、播放器等公共应用的资源列表中 - 高敏感文件可额外做对称加密存储,进一步提升Root设备下的文件安全性
通用注意事项
- 除非用户主动触发分享操作,不要主动将内部文件导出到系统公共存储区域,分享时可通过系统分享组件临时授权访问,避免文件权限扩散
- 不要在公开的ContentProvider中暴露内部存储的文件URI,如需给其他应用临时提供文件访问能力,使用FileProvider配置临时读写权限即可,授权会在对方使用完成后自动失效
内容的提问来源于stack exchange,提问作者Phani Sai
相关产品推荐
相关产品推荐

