簡體   English   中英

在哪里以及如何存儲PHP可用的MySQL密碼

[英]Where and how to store MySQL passwords available to PHP

我使用PHP和單例PDO來訪問數據庫,它顯然需要MySQL的用戶名和密碼。

眾所周知,用戶名和密碼不應存儲在公共目錄中。

因此,我可以做類似require 'some_path/my_secrets.php'; 它設置了一堆變量,但隨后可能在全局范圍內定義這些變量,這不是一個好主意(允許的,使用單例時不是全局的,但仍然如此)。 好的,我只能在某個函數中需要秘密文件,但是要記住的很多...

有沒有更好的方法可將私有數據提供給PHP腳本? 另外,我應該采取其他步驟嗎? 謝謝

我有同樣的問題,最初

  • DB密碼存儲在包含目錄內的includes文件中(即,防止直接從Web文件中顯示偶然的PHP代碼)

然后又有了另一個想法,雖然有點復雜但仍然可行

  • 制作一個C程序,該程序擁有已編碼的DB數據,並從系統調用中傳遞數據。 源代碼(包括編碼的密碼)在安全的地方擁有。 C代碼必須執行一些檢查,以確保從PHP等進行調用。

但這非常昂貴-C速度很快,但始終通過系統加載密碼非常昂貴。 因此,在游戲中添加APC可以使整個過程變得更加輕松快捷

  • 在第一個請求期間,將DB數據加載到APC永久變量中-這樣數據就在內存中,並且很難從外部獲取。 通常,算法是

算法

Check if APC variables are set
If yes use them
If no load them from C program, only once

APC文檔

  • 例如,使用php-fpm另一個想法是在fpm配置中設置一個環境變量(只能由root讀取),其中包含密碼

最后,您還可以創建自己的PHP擴展,以提供來自C代碼的數據(擴展通常以C編寫)。 這是一些擴展文檔

這不是如何防止密碼被竊取的最終答案,但是至少這將使黑客更難確定密碼-並且還需要更多的知識。

我知道的大多數系統都有.htaccess保護的包含文件。 在內部定義一個配置數組並完成。 也許這不是最安全的方法,但是許多商店,CRM和其他Web服務都可以這樣做。

首先,我要說的是,除非您的PHP應用程序需要它,否則應盡可能限制該應用程序的數據庫帳戶的權限(例如:對適當表的讀取訪問,或者盡可能少的寫入訪問)。 如果您的應用需要管理員訪問權限才能創建表等,那么這完全是蠕蟲的“另一罐”。

其次,如ring0所建議的,不要以純文本形式存儲數據庫密碼。 我建議使用哈希API存儲您的密碼哈希,例如: https : //gist.github.com/nikic/3707231 當然,最好將散列存儲在其他第3位(至少是一個單獨的文件)。 如果您的用戶是值得信賴的,並且可以找到一種方法,則可以根據用戶的登錄信息來計算哈希值,但這可能需要在每個用戶的密碼文件中單獨輸入(因為每個哈希DB密碼都是不同)。

從來沒有一種萬無一失的方法,而且我不是安全專家,但是我知道純文本總是不利於存儲密碼,因此我認為這是朝正確方向邁出的一步。

您的解決方案很好。

大多數建議的解決方案只是被誇大了,盡管它們可能會提高安全級別一點,但不值得您付出額外的努力。

因為安全性不僅應依賴密碼的保密性。 充其量,即使密碼被泄露,對於攻擊者來說,由於無法使用它,它的知識也毫無價值。

這意味着,使用遵循最低特權原則的權限的專用於您的應用程序的MySQL用戶,並且僅允許從該應用程序的Web服務器訪問數據庫(請參閱MySQL訪問權限系統 )。

暫無
暫無

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

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