我应该混淆Android应用程序存储的OAuth消费者密码吗?
我的Android应用程序包含Twitter API的OAuth使用者密码。 目前,它以纯文本格式存储在.properties
文件中,因此有人在APK中查找它时不费吹灰之力。
我应该采取措施来掩盖它(如,rot13或存储在混淆Java代码)? 或者我应该避免这样做,因为这会造成虚假的安全感?
人们通常如何在Android应用程序中分发/存储OAuth秘密? 这个秘密被偷窃和滥用是多么常见?
真正的问题是攻击者从窃取到的是什么…
你应该尽全力来保护秘密,但最终,一个积极主动的黑客总是可以在已安装的应用程序中获得。 所以这是秘密的价值与困难的提取。
客户端秘密的价值是冒充应用程序。 它不给任何用户数据的访问权限。 但是,由于Twitter支持自动向以前批准的应用程序(使用Twitterstream程login)颁发凭据,因此攻击者可能会利用您的秘密构buildWeb应用程序,并使用盲目redirect来窃取用户数据。
Twitter实施的问题在于,他们不会向开发人员询问应用程序的性质。 如果他们这样做,他们就不会给你一个秘密,并且会阻止任何人使用你的客户端证书构buildWeb应用程序,并从已经批准的用户那里窃取数据。
混淆是一种select,但是一个弱点。 把这个秘密移动到一个充当API代理的Web服务器上是另一回事,但是这只是将问题转移到其他地方,因为现在你的应用必须对代理服务器进行authentication。 但是,如果您需要用户login您的站点(可以通过Web视图使用Twitterlogin),则此模式可以相当安全。 这样,有人试图滥用您的代理将需要他们的用户打开您的服务帐户,这不是很吸引人。
总之,继续并混淆它。 它没有伤害。 考虑使用代理模式了。 也许让Twitter知道他们的安全策略“不是很好”。
我肯定会阅读OAuth的作者之一Eran Hammer-Lahav的这篇分析报告, 这篇文章引用了另一篇剖析Twitter的OAuth秘密问题的文章 。
我的build议是混淆密钥,这样它就不能被轻易地提取出来,而且你应该对谋杀者和垃圾邮件制造者是安全的。
哈默 – 拉哈夫的观点是,OAuth的秘密不应该被撤销,只应该被用来收集统计信息。 希望推特按照这个build议。
0Auth的要点是你不要在设备上存储任何珍贵的敏感信息 – 所以在设备上存储秘密是好的(好得多真正的用户凭据)。 如果您的设备机密被盗,用户可以始终使访问无效,而无需更改其凭据