为什么openFileOutput()模式为MODE_WORLD_READABLE的文件(如手册所述)足以使其他应用程序可读文件(通过共享意图)?
即使文件是可读的,目录是否保持私有(rwx------而不是rwxrwxrwx)?
为什么openFileOutput()模式为MODE_WORLD_READABLE的文件(如手册所述)足以使其他应用程序可读文件(通过共享意图)?
即使文件是可读的,目录是否保持私有(rwx------而不是rwxrwxrwx)?
即使文件是可读的,目录是否保持私有(rwx------而不是rwxrwxrwx)?
将目录设置为deny-all 将阻止第三方列出目录的内容或在其中创建新文件。在给定文件的完全限定路径的情况下,它对读取文件没有影响。
话虽如此,请不要使用MODE_WORLD_READABLE
. 改用FileProvider
,这样您就可以更精细地控制谁可以访问该内容。这样,例如,您可以让文件完全无法访问,除非进行特定的共享操作。
我认为手动引用是不正确的。无论其模式如何,其他应用程序都无法读取内部存储中的文件。您遇到的困惑并不少见,这就是为什么应用程序应该使用 FileProvider 向其他应用程序提供文件的原因。
这是一个安全问题:文件系统权限不能充分保护数据。要通过文件权限将文件提供给另一个应用程序,您必须设置相当于 chmod a+r (至少)。这样就可以读取任何其他应用程序,邀请任何汤姆、迪克或哈利开始啜饮你的文件。此外,访问更改是永久性的,除非您记得将其更改回来。
相比之下,使用带有 FileProvider 的 URI 权限仅提供临时读取访问权限,并且仅对请求它的特定应用程序提供。您可以设置您的应用程序,以便仅在用户访问您的应用程序请求文件时授予访问权限;至少,用户知道请求文件的应用程序和拥有它的应用程序。