簡體   English   中英

如何保護python中的mysqldb連接?

[英]How to protect mysqldb connection in python?

我正在創建一個需要從遠程數據庫進行mysql連接的pygtk應用程序。

db = MySQLdb.connect("remotehost","username","password","databse", charset='utf8')

應用即將完成,即將發布。 但是問題是,如果有人反編譯此腳本,他們可以輕松讀取上述憑據,那么就會出現安全問題。 那么如何保護該代碼,或者有什么方法可以強烈地編譯該文件?

數據庫連接通常是由受信任網絡內部的受信任計算機建立的,其原因有多種:

  • 如您所見,客戶端需要將訪問憑據存儲到數據庫。
  • 大多數情況下,此類連接是在沒有傳輸安全性(未加密)的情況下進行的,因此任何竊聽者都可以觀察和處理請求/響應。
  • 數據庫路徑中的延遲通常是一個問題,因此您希望將其最小化,從而使客戶端靠近數據庫

違反此常規做法意味着您必須處理這些問題。

具有使用其他協議(例如HTTP / REST)的中間服務來公開間接修改數據庫的API是非常常見的。 您可以將服務保留在可信任計算庫中的主機上,並且只有一台主機可以訪問數據庫。 在這種體系結構中,您可以(並且應該)在中間服務中執行身份驗證和強制訪問控制 反過來,為訪問該服務的每個客戶端使用不同的憑據將有助於確保事情的安全。


如果此時不能重寫您的應用程序,則應遵循patriciasz的建議,以保持盡可能少的特權 您可能還對使獲取證書更困難(但並非不可能)的技術感興趣

無法保護運行它的計算機的所有者(無論是否編譯)您的代碼。

在這種情況下,他將有效地具有與應用程序的SQL用戶相同的訪問限制。

沒有很好的方法來保護您的代碼,但是可以在使用connect使用read_default_file選項。 然后將從文件中讀取連接參數,該文件由read_default_file指定。 注意:這絕對不能確保您的用戶名和密碼的安全,因為有權訪問cnf文件的任何人都可以獲取信息。

在數據庫和應用程序之間建立接口。 只有該接口才能獲得真正的數據庫訪問權限。

為應用提供憑據以訪問該界面(僅該界面),然后讓該界面與數據庫進行交互。 這增加了第二層以提高安全性並有助於保護數據庫完整性。

在未來,從一開始就以不同的邏輯發展。 該應用程序無需訪問數據庫。 相反,它需要來自數據庫的數據。

另外,作為數據庫安全性的規則,請避免將憑據放在客戶端。 如果您有n個應用程序,則n個應用程序可以訪問您的數據庫,並且控制訪問點是數據庫邏輯的重要組成部分。

分開程序邏輯是真正的交易,憑據不必像芯片上所說的那樣駐留在客戶端計算機上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM