2010-11-04 28 views
1

我正在開發一個Web應用程序,它將要求在PHP和JavaScript中使用不同腳本中的MySQL數據庫。我習慣了連接到db的「標準」概念,但我想知道如何讓這些字符串遠離窺探。我的假設是,如果一個腳本包含連接信息,那麼它可以用來進入數據庫本身,並對用戶信息和其他重要數據造成嚴重破壞。數據庫連接安全:保護腳本中連接信息的最佳實踐?

有什麼建議嗎?

+1

JavaScript沒有直接連接到數據庫服務器,是嗎? – Gumbo 2010-11-04 17:42:38

+0

我正在考慮沿着ajax的線條。授予我目前對這項工作如何極少的知識。 – Eric 2010-11-04 18:36:25

回答

1

如果您具有所需的權限,請嘗試將連接信息保存在環境變量中,使用它們進行連接,然後取消設置。

我記得在一些書籍和在線資源中遇到過這種情況,但目前最初的幾個Google頁面沒有任何迴應。

首先,在PHP之外設置兩個環境變量,如PHP_MYSQL_USERPHP_MYSQL_PWD。請注意,您可能需要重新啓動您的Web服務器,甚至是您的操作系統才能激活它們。

然後,在PHP:

mysql_connect('localhost', getenv('PHP_MYSQL_USER'), getenv('PHP_MYSQL_PWD')); 
putenv('PHP_MYSQL_USER='); 
putenv('PHP_MYSQL_PWD='); 

putenv的有些可選的,如果您在您的系統不安全的第三方或用戶腳本等,通過它們你做出ENV。其他變量不可用。

通過使用這種方法,即使有人掌握了您的腳本,他們也不會知道您的數據庫憑證。但請記住,如果有人將腳本/ shell上傳到服務器,他們仍然能夠看到這些變量。您可以將您的上傳目錄保存在PHP不可執行的完全不同的區域,和/或具有較低的權限。你必須檢查你上傳的安全性,這個機制和其他服務器的東西。

作爲一個附註,請看看PHP PDO,而不是使用壞的'mysql_connect()。你可以搜索無數的原因。

+0

你能指點我的任何例子嗎? – Eric 2010-11-04 18:37:03

+0

謝謝,我會深入探討這一點。現在應該有點容易,我有一個參考點:) – Eric 2010-11-05 12:04:38

+0

我把它投下來,因爲隱藏在環境變量中的東西實際上比將它們存儲在文件中更糟。文件至少擁有所有權/許可來保護它們。環境變量是由於子繼承繼承它們而造成的危險,所以其他程序可能會在您知道的情況下訪問它們。如果您的用戶/ db/pass作爲環境變量可用於apache,您的所有頁面都可以訪問它們,並且它們不需要。如果任何頁面存在安全漏洞,那麼這是信息泄漏的主要潛在可能。 – Marcin 2010-11-05 13:36:03

0

如果有人有權訪問您的腳本的源代碼來查看這些密碼,您已經遇到了很大的麻煩。確保這些腳本具有正確的文件權限等(即只有需要它的人才可讀)。