我正在努力實現一個環境,即多個網站將使用與PHP自己的MySQL數據庫實例完全相同的PHP副本。這顯然意味着每個網站的連接憑證,越多的用戶密碼越多,因此更適合黑客的目標。只是爲了確保每個人都在同一頁這些都是我在談論的憑據...PHP:確保數據庫連接憑據的安全
$user = 'user';// not actual user, not root either
$pass = 'pass';// not actual password
$server = 'localhost';
$database = mysql_connect($server,$user,$pass,true|false);
所以,我說的是用來密碼連接到數據庫中,而不是在密碼數據庫(爲了澄清我用鹽和胡椒粉進行了散列)。
我還沒有讀過任何我認爲可以遠程表明您可以擁有100%安全的安全性的東西,因爲顯然服務器需要連接到數據庫併爲訪問者全天候地獲取內容;如果我錯了,我很想聽聽這是如何做到的。因此,讓我們假設黑客擁有root用戶訪問權限(或者如果這並不意味着訪問PHP代碼,那麼我們就說可以訪問所有的PHP源代碼),並且他們(在這種情況下)希望訪問/修改/等數據庫。如果我們無法阻止他們訪問PHP源代碼,那麼我們希望儘可能減慢它們的速度。我可以將每個站點/數據庫連接密碼保存在每個站點的單獨文件中(可以像我在完成多域支持後的幾周內),而不是在public_html(顯然)內部。我使用序列化和反序列化來存儲某些變量,以確保當共享主機上的數據庫變得不可用時防止某種程度的容錯性(防止站點A查看並像站點B一樣操作,反之亦然),因爲數據庫有時可能無法使用多次一天(我的數據庫錯誤日誌被寫入SQL服務再次可用並捕獲這些「離開」錯誤)。我想到的一個想法是確定一種將密碼存儲在一個散列中的方法,並將它們散列爲用於通過PHP連接到數據庫,儘管我希望對此有一些意見。
如果有人從數據庫的角度有一個建議(例如有限制用戶選擇,插入,刪除,更新等,並且不允許DROP和TRUNCATE作爲例子)我主要關心的是確保我是SQL中立的因爲我打算最終從MySQL遷移到PostgreSQL(這可能或可能不相關,但如果最好提及它)。我目前使用phpMyAdmin和cPanel,phpMyAdmin顯示連接的用戶與站點的數據庫用戶名不同,所以在這方面,我仍然可以使用該用戶的某些命令(DROP和TRUNCATE作爲示例再次)並限制SITE用戶的權限,除非我出於某種原因被誤認爲?
有沒有辦法配置連接憑證被接受的地方的上下文?爲了澄清,訪問源代碼的黑客不會像合法用戶那樣訪問站點。
另一個想法是基於系統的加密,是否存在一個近乎普遍的(如在每個或幾乎每個LAMP Web主機設置中)網絡託管技術,其中系統可以通過Apache讀取/寫入文件會引入一個黑客必須確定一種避開方法的新層?
我對每個用戶當然使用不同的密碼。
我目前在共享主機,但希望我的設置將最終擴展到專用主機。
那麼對我的安全概念有什麼想法以及我可以嘗試使我的數據庫連接憑證更安全嗎?
說明:我正在尋找我可以追求的想法。如果對任何建議有不同意見,請澄清並解釋您的擔憂,以替代對特定方法進行辯論,因爲我可能甚至可能沒有考慮過讓別人開始追求某個給定的概念。謝謝!
這不是一個建設性的問題,不適合SO,請發表具體問題,這隻會導致辯論和討論。 – Jakub 2012-01-05 15:07:59
我看不出如何提高存儲數據庫憑證的安全性不具有建設性。我不想爲辯論尋找辯論,我會在我的問題上加上澄清。 – John 2012-01-05 15:16:38