2017-10-13 248 views
10

我開發的應用程序規定軟件應防止未經授權的訪問。爲了實現這一點,我使用了基於用戶和密碼的身份驗證,並提供兩種可用的角色 - 標準用戶和管理員。在Python PyQt桌面應用程序中安全地認證和授權用戶

這是完全用Python實現的,通過使用SQLAlchemy與數據庫PyQt進行用戶界面交互。

使用brcypt對輸入的密碼進行散列,然後將其與相應用戶名(Web服務中使用的標準認證技術)的數據庫中存在的散列進行比較。

成功驗證後,名爲self.authenticatedUser的變量包含類User的SQLAlchemy實例。

這個實現的結果是任何人都可以編輯的登錄方法簡單,直接在數據庫中查詢User類型的對象與用戶名admin和User返回SQLAlchemy的實例分配給self.authenticatedUser和賓果黑客可以訪問系統。

因爲我分發這個用python編寫的軟件,黑客(或任何類型的程序員)要關閉身份驗證機制只需幾分鐘。此外,我不能在這裏使用Web服務通過獲取登錄登錄令牌進行身份驗證或授權,因爲該軟件將在具有air gap的環境中使用。

是否有任何具體的方式來實現這個以一種非常安全的方式?

  1. 使用本地MySQLDatabase
  2. 使用安全(比較難於逆向工程很可能是合適的)機制。
+0

您可以考慮將[PyInstaller](http://www.pyinstaller.org/)作爲操作系統二進制文件進行分發。 SQLAlchemy和PyQt位於受支持的軟件包列表中。 PyInstaller甚至支持PyCrypto。 –

回答

2

一切都只是逆向工程代碼的難點,所以這裏有一些技術來「保護」它。

  • 預編譯您的應用程序字節碼(但也有工具來反編譯回像uncompyle6
  • 使用一些混淆你的代碼,所以它是很難讀(如pyminifier
  • 加密您的應用程序(例如pyconcrete
  • 使用用戶密碼來即時加密應用程序本身的重要部分。使用密碼,黑客可以重新創建未加密的應用程序,但沒有它,這是不可能的。
0

即使有氣隙,服務也是可能的。但是,如果你不想這樣做,你應該保護你的數據,就好像你爲每個用戶提供了一個合適的SQL客戶端(如pgAdmin或SQL Server Management Studio)。我建議你開始在數據庫級別配置你的角色/用戶。

0

由於bcrypt不再被採用,您可以輕鬆使用SHA2x。我認爲你需要考慮使用SHA2x出於安全原因。其次,你可以使用JWT,因爲它可以在Python中100%運行。還要深入瞭解2因素認證,這對您的安全檢查來說是另一個加分。

相關問題