在Android开发中删除文件的安全方法

时间:2018-11-10 18:28:55

标签: android android-security

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

该功能被认为是不安全的,因为理论上可以使用扫描所有存储设备的工具来检索数据。因此,如果删除的方式是“不安全的” ...在Android中删除文件的“安全”方式是什么? (以避免收到应该是“高级”错误的“安全错误”)。在Android开发中删除文件的正确方法是什么?

我在2种不同的应用程序中收到相同的安全警告,一种使用本机Java编写,另一种使用Xamarin Forms。非常感谢你!

3 个答案:

答案 0 :(得分:1)

  

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

vast 大多数Android设备都没有。您在delete()上使用File

  

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

如果Android设备恰好使用经典硬盘驱动器(旋转磁介质),则可以在删除数据之前覆盖数据。在任何种类的闪存介质上,这都是无效的,因为写入数据的物理位置可能随每次写入操作(“损耗平衡”)而变化。

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

  • 如果可以读取该数据,如果认为用户将受到伤害,请使用用户提供的密码将其加密存储。

  • 如果您只是想避免这种警告,请询问此“安全工具”的开发人员他们期望您做什么。或者,找到更好的工具。

答案 1 :(得分:0)

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

删除文件时,无论使用什么API,实际上删除的是文件表中的记录。

保留磁盘或闪存上的实际数据。

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

但是,此方法仅适用于硬盘等磁性介质。 Android设备使用NAND闪存进行存储。

由于NAND芯片在发生故障之前可以进行的写入次数比磁存储器要少得多,因此这些芯片通常具有分散写命令的机制。

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

因此,一方面,对于闪存存储而言,一次覆盖文件就足够了,但是另一方面,在应用程序级别无法正确执行操作。

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

请勿将用户凭据(例如密码)存储在Android上的常规文件中。 使用Android accounts API,让操作系统管理安全性。

如果您仍然需要文件存储但又想保护数据,请在内存中对其进行加密,然后写入文件。

答案 2 :(得分:0)

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

如果确实是这样,则加密是保证适当安全性的真正方法。文件不仅会受到删除后的恢复保护,而且会在设备的已知寿命内得到保护

也就是说,在漏洞评估(即代码的静态分析)的情况下,检测到您正在要求通过[file.delete()]删除加密文件并不是立即的。或者,也许您只是在调用删除没有隐藏内容的文件

在这两种情况下,发现的漏洞都是误报。这是游戏的一部分,因为您可以猜测,对于自动化工具来说,了解某个东西是否真正“应得”保护是相当复杂的

要消除此漏洞,您可以做的是在调用file.delete()之前添加逻辑以清空文件。为此,您有一个示例here。这将解决您遇到的漏洞检测