2011-05-02 25 views
2

我的問題是,是否有可能只允許來自某個域的數據庫連接。我想這可以通過檢查推薦網址來完成,但我很好奇是否有更簡單的方法。阻止與SQL數據庫的第三方連接(來自config.php文件)

我問這個問題的原因是因爲我想到了一個隨機搜索我的服務器上的config.php文件的人,如果他們發現了,就可以簡單地包含它並隨意運行mysql查詢。這絕對是我不想要的東西。

將配置文件隱藏在不尋常的地方會更好嗎?

由於提前, 菲爾

+0

爲什麼不簡單地使用config.php之外的其他東西作爲文件名? – 2011-05-02 13:19:35

回答

2

首先,你的config.php不應該從網上公開訪問。您的Web服務器應該能夠在需要時包含該文件,但文件本身不應該在您的Web服務器中提供。使用正確的配置,您不必擔心某人通過瀏覽器「找到」您的config.php。

另外,在數據庫方面,您應該設置數據庫,以便它只接受來自Web服務器的連接。互聯網上的任何人都不應該公開訪問它。

如果有人已經在您的Web服務器上,不應該在那裏,您可能有更大的問題。這在某些共享主機場景中可能是不可避免的,但如果這是一個問題,請獲得專門的服務器或託管提供商,以便爲您正確設置權限。

+0

所有優秀的答案 - 這一個最幫助我。我改變了文件權限。 – psarid 2011-05-02 13:32:42

2

如果他們是在系統內部,可以看到你的文件,你的機會做多,以保護您的數據庫相當渺茫。至於阻止其他IP連接,您可以特別允許主機訪問數據庫。

2

我想這可以通過檢查推薦URL來完成,但我很好奇是否有更簡單的方法。

不需要Referer是一個HTTP概念,一旦到達數據庫級別,它就沒有意義。

的原因,我問這個是因爲我有某人在我的服務器隨機搜索的config.php文件的思想

配置文件不應該是通過HTTP直接訪問,甚至如果是這樣,它應該在送達之前執行。所以不應該可以遠程訪問數據庫憑據。

如果您擔心同一個共享主機上的其他人,則您的文件系統權限應該阻止訪問。

0

我會用我的用戶表來控制訪問。例如:MYSQL 5.5有一個包含用戶名,密碼,主機名和權限的mysql.user表。如果您要將每個用戶的「主機名」設置爲特定域,則爲 即。 'update mysql.user set hostname = 'somedomain.com' where user = 'root' and hostname = '127.0.0.1';,root用戶只能從該域登錄(除非在用戶表中有根用戶有多個條目)。當然,如果您只使用一個帳戶訪問您的數據庫應用程序/網站,這是行不通的。