假设您有一个使用密码的应用。在开发过程中,您需要解决某些问题,并使用NSLog()
打印出密码以查看其是否正常工作。
在某个时刻,你很开心,一切正常。 您将应用程序发送给Apple,最后接受该应用程序并将其提交给App商店。
您忘记删除输出密码的NSLog()
....
有什么办法可以这么糟糕吗?或者,黑客是否可以通过任何方式收听NSLogs()
?
答案 0 :(得分:3)
是的,如果您的应用崩溃,这可能非常糟糕。一旦用户同步他们的设备,崩溃日志将与NSLog
的内容一起进入他们的计算机。这使得任何拥有二进制文件阅读器的人都可以使用明文密码。
例如,如果Alice将手机交给Bob,那么Bob会输入密码,完成任务,注销,并将Alice的手机送回。然后你的应用程序崩溃了。一旦Alice同步她的手机,她就可以访问Bob的密码。
答案 1 :(得分:1)
这取决于您存储的密码类型。 我相信日志文件存储在你的iPhone上。但我非常确定在不将实际设备连接到计算机的情况下阅读这些文件是不可能的。
额外注意:如果我必须诚实,我现在不会拒绝我的应用程序进行审核。准备补丁是个好主意,当您的应用被审核时,您应该尽快上传新版本。但是,如果您保存将应用程序连接到某种数据库的密码,我会拒绝它。
答案 2 :(得分:1)
我猜。设备日志将包含该密码!这可以在xcode-window-device / device logs中看到。
答案 3 :(得分:1)
是的,这很糟糕。我见过有关攻击者快速询问设备控制台日志的讨论。使用这些日志中的字符串,他们可以快速搜索可执行二进制文件中的类似字符串,例如用于部分日志条目的格式字符串。示例:
NSLog(@"user entered password '%@'", passwordString)
找到格式字符串,他们可以快速找到实际使用该字符串的代码部分,因此他们找到了处理密码的代码部分。然后,他们可以分析相关代码,完全绕过密码或做任何他们想做的事情。
即使设备长时间不占用大量控制台数据,攻击者可能需要做的就是将被盗设备连接到计算机,启动应用程序并输入随机密码。如果应用程序记录密码(正确或不正确),则仍会捕获所需的字符串并开始攻击。
当然,如果日志行仍在设备控制台数据中,则攻击者还会获得实际用户的实际密码。如果该用户重复使用用户名和密码(就像许多人一样),攻击者现在可能拥有用户在互联网上的其他帐户的凭据,这可能更敏感。
许多编程讨论建议不要直接使用NSLog,并建议使用像DEBUGLOG这样的宏,它将从发布版本中编译出来。如果用于调试,则应用程序不会留下攻击者使用的线索。