我正在開發一個Web應用程序,它將要求在PHP和JavaScript中使用不同腳本中的MySQL數據庫。我習慣了連接到db的「標準」概念,但我想知道如何讓這些字符串遠離窺探。我的假設是,如果一個腳本包含連接信息,那麼它可以用來進入數據庫本身,並對用戶信息和其他重要數據造成嚴重破壞。數據庫連接安全:保護腳本中連接信息的最佳實踐?
有什麼建議嗎?
我正在開發一個Web應用程序,它將要求在PHP和JavaScript中使用不同腳本中的MySQL數據庫。我習慣了連接到db的「標準」概念,但我想知道如何讓這些字符串遠離窺探。我的假設是,如果一個腳本包含連接信息,那麼它可以用來進入數據庫本身,並對用戶信息和其他重要數據造成嚴重破壞。數據庫連接安全:保護腳本中連接信息的最佳實踐?
有什麼建議嗎?
如果您具有所需的權限,請嘗試將連接信息保存在環境變量中,使用它們進行連接,然後取消設置。
我記得在一些書籍和在線資源中遇到過這種情況,但目前最初的幾個Google頁面沒有任何迴應。
首先,在PHP之外設置兩個環境變量,如PHP_MYSQL_USER
和PHP_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()
。你可以搜索無數的原因。
你能指點我的任何例子嗎? – Eric 2010-11-04 18:37:03
謝謝,我會深入探討這一點。現在應該有點容易,我有一個參考點:) – Eric 2010-11-05 12:04:38
我把它投下來,因爲隱藏在環境變量中的東西實際上比將它們存儲在文件中更糟。文件至少擁有所有權/許可來保護它們。環境變量是由於子繼承繼承它們而造成的危險,所以其他程序可能會在您知道的情況下訪問它們。如果您的用戶/ db/pass作爲環境變量可用於apache,您的所有頁面都可以訪問它們,並且它們不需要。如果任何頁面存在安全漏洞,那麼這是信息泄漏的主要潛在可能。 – Marcin 2010-11-05 13:36:03
如果有人有權訪問您的腳本的源代碼來查看這些密碼,您已經遇到了很大的麻煩。確保這些腳本具有正確的文件權限等(即只有需要它的人才可讀)。
JavaScript沒有直接連接到數據庫服務器,是嗎? – Gumbo 2010-11-04 17:42:38
我正在考慮沿着ajax的線條。授予我目前對這項工作如何極少的知識。 – Eric 2010-11-04 18:36:25