2011-11-01 82 views
5

首先,如果有確切的重複 - 我沒有找到任何內容,所以如果答案已經提供,我表示歉意。保護Web應用程序(LAMP堆棧)中的數據庫(MySQL)登錄憑證

我會提出我面臨的問題,希望我會得到一些見解或一個簡單的「不可能的」答案。

如何保護Web應用程序中的數據庫憑據,以防PHP服務器受到攻擊? 假設在這個問題的情況下,我們不是在談論共享主機,VPS或任何類似的東西,只有一個人可以訪問存儲MySQL信息的盒子。

MySQL服務器本身位於另一個(遠程)盒子,並允許僅連接一系列IP地址(綁定到PHP盒子)。

如何確保惡意用戶無法獲取MySQL連接字符串所需的詳細信息?假設用戶已經打破了運行PHP的Linux框的根登錄。

在這種情況下,您將採取哪些步驟來提供建立MySQL連接所需的訪問信息方面的最高安全性?

感謝您提前閱讀和評論。

+0

此主題已被覆蓋已在這裏 - http://stackoverflow.com/questions/3710511/best-way-to-connect-to-mysql-with-php-securely – hafichuk

+0

@hafichuk - 鏈接提供的建議某些部分的保護訪問,最好的答案是用密碼加密文件。但是,如果某人是root的話 - 無法阻止他們修改PHP代碼並回顯憑據。我想知道是否有人有更好的方法來建立應用程序服務器和數據庫服務器之間的通信,例如公鑰加密或類似的數據庫服務器在允許連接之前參與協商。 – Furicane

回答

2

這裏最好的解決方案是,如果這是一個主要優先事項,那就是使用存儲過程。

存儲過程將數據庫查詢存儲在數據庫中,因此只需設置它們,然後使用存儲過程執行權限創建新的MYSQL用戶。這種方式即使應用程序代碼遭到破壞,他們也只能操縱數據的有限子集,而且他們也不瞭解底層數據庫結構。

由於混合應用程序邏輯與存儲系統的事實,此方法的缺點是可維護性,並且可能無法跨平臺移植。

如果您想要一個簡單的解決方案,hafichuk建議可能會更好,只需對其進行定製以滿足您的需求。不幸的是,您的腳本需要能夠訪問數據庫,除非您的Web服務器和應用程序服務器位於不同的計算機上,並通過一些加密通道(如SSH)進行通信,但是這樣做太複雜了。這一切都取決於保護對你來說有多重要,以及你願意去保證它有多遠。

1

不幸的是,PHP代碼將以明文形式顯示mysql系統的用戶名和密碼。我的建議是,您限制該數據庫用戶的權限(您使用的數據庫用戶不是root,我希望)。

請參閱http://dev.mysql.com/doc/refman/5.5/en/adding-users.html。如果您使用的是phpmyadmin或其他用戶界面,那麼您可以通過這種方式來限制用戶權限。

基本上,您通常只想將SELECT,UPDATE,INSERT和DELETE授予mysql用戶,除非您的應用程序需要其他權限。

除此之外,希望別人可以提供更好的解決方案。

+0

感謝您的回答,但目標是限制用戶無法正常工作或無法訪問數據庫。即使從數據庫中讀取也被認爲是違規,所以違規程度與刪除或丟棄整個數據集相同。 – Furicane