我的Android應用包含Twitter API的OAuth使用者密碼。目前它以純文本形式存在於.properties
文件中,因此某人在APK中查看它時需要付出一些努力。我應該混淆Android應用程序存儲的OAuth使用者密碼嗎?
我應該採取措施來掩蓋它嗎(如rot13或存儲在混淆的Java代碼中)?或者我是否應該避免這樣做,因爲這會造成虛假的安全感?
人們通常如何在Android應用中分發/存儲OAuth祕密? 祕密被盜和濫用的常見情況?
我的Android應用包含Twitter API的OAuth使用者密碼。目前它以純文本形式存在於.properties
文件中,因此某人在APK中查看它時需要付出一些努力。我應該混淆Android應用程序存儲的OAuth使用者密碼嗎?
我應該採取措施來掩蓋它嗎(如rot13或存儲在混淆的Java代碼中)?或者我是否應該避免這樣做,因爲這會造成虛假的安全感?
人們通常如何在Android應用中分發/存儲OAuth祕密? 祕密被盜和濫用的常見情況?
真正的問題是什麼呢攻擊者竊取它得到...
你應該做你最好的保護的祕密,但在年底,一個充滿活力的黑客總是可以得到它在安裝的應用。所以這是祕密與提取困難的價值。
客戶端密鑰的值是模擬應用程序。它不給任何用戶數據的訪問權限。但是,由於Twitter支持自動向以前批准的應用程序(使用Twitter流登錄)發佈憑據,因此攻擊者可能會利用您的祕密構建Web應用程序,並使用盲目重定向來竊取用戶數據。
推特的問題在於他們不會向開發人員詢問應用程序的性質。如果他們這樣做了,他們就不會向您發佈祕密,並且會阻止任何人使用您的客戶端憑據構建Web應用程序,並從已經批准的用戶處竊取數據。
混淆是一種選擇,但是一個弱選項。將祕密移至充當API代理的Web服務器是另一回事,但這只是將問題轉移到其他地方,因爲現在您的應用必須針對代理服務器進行身份驗證。但是,如果您需要用戶登錄您的站點(可以通過Web視圖使用Twitter登錄),則此模式可以相當安全。這樣,有人試圖濫用您的代理服務器,他們需要他們的用戶在您的服務上打開帳戶,這不太吸引人。
總之,繼續並混淆它。它沒有傷害。考慮使用代理模式。也許讓Twitter知道他們的安全政策「不太好」。
感謝您的回答。我正在開發的應用程序不會成爲高調的社交應用程序,從它推出是一個側面功能。所以我想我會帶着一些迷惑,但是會跳過代理模式增加的複雜性。 –
很高興看到我的觀點被知情人加強。儘管代理確實將問題轉移到其他地方,但一個想成爲黑客的人必須編寫一個特定的程序來濫用您的代理。事實上,他們只會從其他應用程序中收集消費者的祕密 - 有超過一百萬的第三方應用程序(http://techcrunch.com/2011/08/19/twitter-releases-bootstrap-a-set-of-畢竟,在那裏工具構建web-apps-using-css /?utm_source = feedburner&utm_medium = feed&utm_campaign = Feed%3A + Techcrunch +%28TechCrunch%29)。 –
Twitter應用程序中有一個CallBack URL,這是否足以阻止黑客構建Web應用程序竊取數據?它必須是您設置到您的應用設置的域名,否則它不會授權您發送的任何內容。 – Maziyar
0Auth的要點是你不會在設備上存儲任何珍貴的敏感信息 - 因此可以在設備上存儲祕密(更好的是真實的用戶憑證)。如果您的設備機密被盜,用戶無需更改其憑證即可使訪問無效
但是,如果有人發現您的應用程序的用戶密碼,他們可以假裝爲您的應用程序。您可以更改密鑰和密碼,但是您現場的所有安裝都無法再發送。 – funkybro
沒有辦法從確定的人隱藏你的應用程序內的東西(即使OS 360是反向工程,並在俄羅斯的機器代碼修補)。即使有人僞裝成你的應用程序,用戶仍然必須對服務進行身份驗證 - 因此在那裏沒有真正的妥協。 –
我認爲這個答案混淆了消費者的祕密與oauth令牌。 –
我肯定會讀一位OAuth作者Eran Hammer-Lahav的this analysis,他引用另一個article dissecting Twitter's OAuth secret problems。
我的建議是混淆的關鍵,以便它可以平凡不能被提取,你應該從chancers和垃圾郵件發送者的安全。
錘Lahav的觀點是,OAuth的祕密,不應該被吊銷而不應僅僅被用來收集統計數據。希望Twitter會遵循這個建議。
這篇文章說「不要在安裝的應用程序中使用客戶機密」,而你的建議是做相反的事情...... – 2011-08-19 14:11:29
@Graham偉大的一點 - 我應該更清楚一點。如果OP正在計劃進行,則混淆*是*重要的。否則,我想你需要一個祕密存儲在遠程服務器上的實現,並且Web服務充當OAuth調用的代理。我不知道這種方法的最佳做法是什麼。 –
我與我的iOS應用程序和後端的NodeJS + ExpressJS + PassportJS具有相同的策略。我使用Twitter反向驗證來驗證iOS用戶。但爲了保證這一點,並阻止用戶在中間嗅探HTTP數據包以找出頭中的內容,我打算在我的服務器上使用HTTPS來加密數據。選中此項可避免將祕密密鑰嵌入您的應用中:https://dev.twitter。com/docs/ios/using-reverse-auth – Maziyar
注意:反向身份驗證僅適用於iOS –