2009-05-25 29 views
2

我有一個用python編寫的應用程序。我爲使用egg文件的應用程序創建了一個插件系統。雞蛋文件包含編譯好的python文件,可以很容易地反編譯並用來破解應用程序。有沒有辦法來保護這個系統?我想爲此使用數字簽名 - 在加載這些雞蛋文件之前簽署這些雞蛋文件並檢查簽名。有沒有辦法通過python以編程方式執行此操作?也許使用winapi?用於python應用程序的安全插件系統

+6

「破解應用程序」是什麼意思?你擔心「惡意」用戶嗎?請提供一些用戶下載,安裝的用例,然後 - 什麼? - 打破他們下載的應用程序?請更詳細地解釋這種情況。 – 2009-05-25 22:44:48

回答

3

有沒有辦法保護這個系統?

答案是「那要看」。

你應該問的兩個問題是「人們應該做什麼」以及「人們能夠做什麼(對於給定的實現)」。如果存在後者是前者的子集的實現,則系統可以被保護。

我的一位朋友正在開發一個編程競賽評委:一個程序,該程序在某些測試數據上運行用戶提交的程序,並將其輸出與參考輸出進行比較。這很難保證:你想運行其他人的代碼,但你不想讓他們運行任意代碼。你的情況有點類似於這個嗎?然後答案是「這很困難」。

你想讓用戶從網上下載不值得信任的代碼,並運行一些保證它不會軟管他們的機器嗎?然後看看各種網頁語言。一種解決方案是不提供對系統調用(JavaScript)的訪問或提供對某些潛在危險調用(Java的SecurityManager)的有限訪問。據我所知,它們都不能用python完成,但你總是可以破解解釋器,並且不允許加載外部模塊而不是在某些白名單上。這可能很容易出錯。

您是否希望用戶編寫插件,並且無法修補應用程序的主體代碼?考慮用戶可以反編譯.pyc文件並修改它們。假設那些運行你的代碼的人可以隨時修改它,並考慮WoW的黃金機器人。

一個類似於沙盒式web-ish模型的僅Linux解決方案是使用AppArmor,它限制了您的應用可以訪問哪些文件以及可以創建哪些系統調用。這可能是一個可行的解決方案,但我不太瞭解,所以除了「調查」之外,我不能給你提供建議。

如果您擔心的只是邪惡的人在代碼間傳輸時修改代碼,則存在標準加密解決方案(SSL)。如果您只想加載已簽名的插件(因爲您想控制用戶所做的事情),則簽名代碼聽起來就像是正確的解決方案(但要小心狡猾的用戶或編輯.pyc文件的惡意人員,並且禁用「is-it-簽字檢查)。

相關問題