安卓开发中删除文件的安全方式



使用安全工具分析我的Android应用程序后,它检测到一个高级漏洞"文件不安全删除检查"。我已经对此进行了调查,问题似乎是应用程序使用了"file.delete((".

该功能被认为是不安全的,因为理论上可以使用扫描所有存储设备的工具来检索数据。所以,如果这种删除方式是"不安全的"。。。在安卓系统中删除文件的"安全"方式是什么?(以避免出现所谓的"高级"安全错误"(。在Android开发中删除文件的正确方法是什么?

我在两个不同的应用程序中收到了相同的安全警告,一个是用原生Java制作的,另一个是使用Xamarin Forms制作的。非常感谢!

在Android中删除文件的"安全"方法是什么?

绝大多数安卓设备都没有。在File上使用delete()

该功能被认为是不安全的,因为理论上可以使用扫描所有存储设备的工具来检索数据

如果Android设备碰巧使用经典硬盘驱动器(旋转磁介质(,您可以在删除数据之前覆盖数据。在任何类型的闪存介质上,这都是无效的,因为写入数据的物理位置可能因每次写入操作而不同("损耗均衡"(。

所以,这实际上可以归结为你的目标:

  • 如果您认为如果可以读取此数据,则会对用户造成伤害,请使用用户提供的密码进行加密存储。

  • 如果你只是想避免这个警告,问问这个"安全工具"的开发人员他们希望你做什么。或者,找一个更好的工具。

这不是安卓系统特有的问题。它与文件系统的工作方式及其自身的物理存储介质有关。

当您删除文件时,不管API如何,实际删除的是文件表中的记录。

磁盘或闪存中的实际数据仍然存在。

有一种安全删除的方法:在删除文件之前,请多次用垃圾或零覆盖其内容。

但是,这种方法只适用于硬盘等磁性介质。安卓设备使用NAND闪存进行存储。

由于NAND芯片在失败前可以进行的写入次数远少于磁性存储器,因此这些芯片通常具有分散写入命令的机制。

这意味着,即使你试图在文件上写随机数据或零,也不能保证实际数据会被覆盖。写入可能会转到另一个扇区以避免磨损。

因此,一方面,对于闪存来说,覆盖一次文件就足够了,但另一方面,在应用程序级别不可能正确地覆盖。

如果要确保应用程序的安全,必须确保存储加密的敏感数据。然后,即使有人试图读取原始存储,他们也无法恢复数据。

不要将用户凭据(如密码(存储在Android上的常规文件中。使用Android帐户API,让操作系统管理安全。

如果您仍然需要文件存储,但希望保护数据,请在内存中加密数据,然后写入文件。

正如其他答案所说,从理论角度来看,首先要考虑的是是否真的需要将任何敏感信息存储在客户端的文件中

如果真的是这样的话,加密是保证适当安全的真正方法。文件将得到保护,不仅在删除后的恢复,而且在设备上的已知寿命期间

也就是说,在进行漏洞评估(即对代码进行静态分析(的情况下,不会立即检测到您正在[通过file.delete()]删除加密文件。或者你可能只是在调用删除没有任何东西可以隐藏的文件

在这两种情况下,发现的漏洞都只是一个假阳性。这是游戏的一部分,因为你可以猜测,对于一个自动化工具来说,要理解某个东西是否真的"值得"保护是非常复杂的

要消除该漏洞,您可以在调用file.delete()之前添加清空文件的逻辑。这里有一个样品。这将解决您正在经历的漏洞检测

最新更新