2009-12-02 134 views
1

首先,我意識到沒有這樣的事情是一個完全安全的解決方案(即使有,它的可用性會是廢話)。安全(r)存儲MySQL登錄信息?

這就是說,你如何保護你的MySQL數據庫免受有人下載你的代碼和挑選它的危害?基於我對PHP的使用經驗,似乎有必要在代碼中將其存儲在某個點或另一個位置,這會爲我發送標誌。我可以看到重構對變量,常量和(用戶定義的)函數名稱進行混淆的位置可能是有益的,但最終還是可以通過它進行追蹤並使用數據庫登錄信息找到該文件。

想法?

回答

4

通常,MySQL身份驗證信息存儲在外部配置文件中。基於Web的應用程序使用的MySQL用戶被授予有限的權限,如SELECT, INSERT, UPDATE, DELETE,並且不具有諸如ALTER, DROP, DELETE之類的權限。如果你想向公衆發佈代碼,你將不會包含你的私人配置文件,而是一個通用/指導/最小配置文件。

以加密格式存儲MySQL身份驗證信息有點愚蠢,因爲您還需要在本地存儲私鑰/解密。如果一個未經身份驗證的用戶在服務器上查看代碼或配置文件是微不足道的,問題不在於代碼 - 這是您的服務器設置& config。

1

安全性可以通過在web-root之外存儲任何硬編碼的信息(在配置文件或腳本中)以及通過抑制(在生產代碼上)錯誤消息來輔助。這樣,希望你的用戶不會看到userValidate() expects exactly three paramaters

1

pygorex1是正確的,您應該使用外部配置文件,其中「外部」是指web根目錄之外的文件。因此,即使您的Web服務器中存在配置錯誤(允許用戶查看您的源代碼),但由於無法通過瀏覽器直接訪問數據庫,他們將無法查看數據庫憑據。

pygorex1對用戶權限也是正確的。將mysql用戶的訪問限制在最低限度總是首選。即使黑客會得到您的mysql密碼和用戶名,如果用戶權限僅限於例如SELECT查詢,他也不會造成重大損失。他忘記提到的一件事是,只允許mysql用戶從本地主機(或從任何主機上登錄Web應用程序)登錄,不要在允許的主機中使用通配符。