2015-05-12 113 views
5

我知道這些問題已經單獨提出幾次,我發現的大多數答案是「Python不容易混淆,因爲這是語言的本質。如果您確實需要模糊處理,請使用其他工具「和」在某些時候您需要權衡「(請參閱How do I protect Python codeHow to keep the OAuth consumer secret safe, and how to react when it's compromised?)。保持祕密密鑰在Python中安全

但是,我剛剛製作了一個使用Twitter的API(因此需要OAuth)的小型Python應用程序。 OAuth需要消費者密碼,該密碼遠離用戶。該應用程序需要這些信息,但用戶不應該能夠輕鬆訪問它。如果這些信息不能被保護(並且我使用混淆和保護作爲同義詞,因爲我不知道其他方式),首先爲Python創建OAuth API有什麼意義?然後

的問題(S)是:

  • 是否可以硬編碼在應用程序中的祕密,然後 混淆它以有效的方式?
  • 如果不是,那麼在Python中使用OAuth的最佳方式是什麼?我曾經想過將應用程序的加密密碼與應用程序一起「傳送」出來,並使用硬編碼密鑰來恢復它,但問題仍然存在(如何保護密鑰);讓消費者在服務器中保密,並讓應用程序在啓動時檢索它(如果信息未加密發送,則惡意攻擊者使用Wireshark並從網絡流量獲取用戶密碼比反編譯字節碼更容易,以及我如何確保我將該祕密發送給我的應用程序而不是惡意攻擊者?我知道任何形式的身份驗證都需要在應用程序端有祕密信息,問題依然存在);兩者混合(讓服務器發送加密密鑰,與以前相同的問題)。基本問題是一樣的:如果不能隱藏重要信息,你怎麼能有一些祕密?

我也見過評論說應該對這些關鍵部分使用C/C++擴展,但我對此一無所知,所以如果這是答案,我會很感激一些額外的信息。

+1

誰是這個問題中的「用戶」,你的客戶? (您建議將應用程序與一個密鑰一起「運送」,但我不確定您的意思是否是字面意思。) –

+0

用戶只是我自己,這不是一個嚴肅的項目。我想知道如何使用OAuth實際發佈(例如,使其在他們的網站中可用)的Python應用程序實現它。 – user2891462

+0

這是關於討論的問題[這裏](http://blog.codinghorror.com/keeping-private-keys-private/)? – TigerhawkT3

回答

-1

您可以使用大量的數據操作來編寫自己的簡單對稱隱藏函數,使其難以反轉。

+0

小心開發更多? AFAIK,實施你自己的密碼功能是非常不明智的,問題仍然存在:我在哪裏安全地存儲對稱密鑰? – user2891462

+0

根據你的幻想,編碼你自己的非常簡單但很難翻轉的地穴功能大約需要1-3個小時)。 除了Khnowing密鑰外,如果不知道加密算法,它不會泄露數據。 您也可以使用隨機生成的隨機密鑰。 – psyskeptic

0

如果您想在您擁有的服務器(或筆記本電腦)上進行部署,則可以將祕密存儲在env var或文件中。如果要部署給用戶,建議您或您的用戶應註冊API密鑰,生成ssl密鑰或類似密碼。

-1

目前還不清楚爲什麼您需要將您的 OAuth密鑰與腳本一起運輸。這意味着任何人都可以訪問您的 Twitter帳戶,無論該密鑰本身是否在應用程序內部被混淆。

更典型的情況是您開發了一些Twitter客戶端,任何想在本地運行的人都必須先輸入自己的 OAuth令牌,然後才能運行它。您根本不需要對令牌進行硬編碼,並要求任何用戶提供令牌。

+0

如果我正確理解Twitter的OAuth,則消費者密鑰和使用者密鑰會將我的客戶端識別爲API。客戶端的所有實例都將共享它們,而訪問令牌對於每個用戶都有所不同(請參閱https://dev.twitter.com/oauth/overview/single-user中的示例)。我不會讓他們訪問我的帳戶,但他們可以在Twitter API的視圖中模仿我的客戶。 – user2891462

+0

是的,無論是直接還是間接地將您的OAuth令牌添加到應用程序中,您都可以假設您就Twitter而言。所以IMO有更大的問題;這是真的嗎?你想要做什麼? (提示:不,可能不是。) – deceze

+0

那麼,客戶需要做的第一件事就是向Twitter進行身份驗證,以便使用API​​(請參閱https://github.com/bear/python-twitter#api ),並且它需要消費者密鑰和祕密。就我所知,沒有辦法解決這個問題。你會爲基於Python的Twitter客戶端提出什麼模式,而不會泄露這個祕密? – user2891462