使用安全工具分析我的Android应用程序后,它检测到一个高级漏洞“文件不安全删除检查”。我对此进行了调查,似乎问题在于该应用程序使用了“ file.delete()”。
该功能被认为是不安全的,因为理论上可以使用扫描所有存储设备的工具来检索数据。因此,如果删除的方式是“不安全的” ...在Android中删除文件的“安全”方式是什么? (以避免收到应该是“高级”错误的“安全错误”)。在Android开发中删除文件的正确方法是什么?
我在2种不同的应用程序中收到相同的安全警告,一种使用本机Java编写,另一种使用Xamarin Forms。非常感谢你!
答案 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。这将解决您遇到的漏洞检测