簡體   English   中英

如何確保數據庫連接安全?

[英]How do I make my database connection secure?

我目前正在為我教會的大學團隊建立一個網站,我開始對我正在寫的東西的安全性感到有些擔憂。 例如,我使用這個函數:

function dbConnect() 
  {
  global $dbcon;

  $dbInfo['server'] = "localhost";
  $dbInfo['database'] = "users";
  $dbInfo['username'] = "root";
  $dbInfo['password'] = "password";

  $con = "mysql:host=" . $dbInfo['server'] . "; dbname=" . $dbInfo['database'];
  $dbcon = new PDO($con, $dbInfo['username'], $dbInfo['password']);
  $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $error = $dbcon->errorInfo();

  if($error[0] != "") 
    {
    print "<p>DATABASE CONNECTION ERROR:</p>";
    print_r($error);
    }
  }

每當我進行某種查詢時連接到數據庫。 我總是使用PDO預處理語句來阻止任何用戶輸入的SQL注入,並且我在輸出之前使用htmlspecialchars來轉義。 我的問題是: 如何保護我的數據庫的用戶名和密碼? 我不知道是否有人可以查看我的PHP文件的來源,但如果他們可以,我只能想象我會被軟管。 我該怎么辦?

您應該將數據庫憑據放在文檔根目錄之外的文件中,因此如果某些內容混亂並且您的PHP顯示給未解析的用戶,則任何人都無法看到您的密碼。

看一下 這篇關於這個主題的文章 這篇關於這個主題的文章

解決方案很簡單。 將所有敏感數據放在Web服務器的文檔根目錄之外。 許多專家現在主張將大部分(如果不是全部)PHP代碼放在Web服務器的文檔根目錄之外。 由於PHP不受Web服務器相同的限制,您可以在與文檔根目錄相同的級別創建目錄,並將所有敏感數據和代碼放在那里。

好的,這需要一些澄清。 有人建議您將敏感數據放在文檔根目錄之外。 這有一些優點,但在實用性方面比其他任何東西都更安慰。

你必須考慮潛在的問題來源。

  • 無論您在何處放置數據庫連接信息,具有shell訪問權限的人都將損害您的數據庫連接信息。 這可以包括授權用戶和利用漏洞獲取shell訪問權限的用戶(這已經發生了很多);

  • 如果PHP被禁用或Web服務器被認為是那么PHP文件可能以原始形式提供。 將它們放在文檔根目錄之外將保護您免受此攻擊;

  • 如果有人以某種方式設法將PHP腳本編寫到文檔根目錄,那么它與擁有shell訪問權限的人基本相同,因此沒有任何措施可以保護您。

實際上,如果您的Web服務器受到損害,那么您的配置文件位於文檔根目錄之外的情況將保護您的可能性很小。

數據庫的安全要點是確保來自互聯網的人無法直接連接。 這可以通過防火牆完成,將數據庫綁定到專用IP地址或將數據庫放在專用服務器上。

您可以采取預防措施。 創建一個特定於您的應用程序需要能夠執行的mySQL用戶。 這可以限制攻擊者在用戶名和密碼泄露時可以造成的破壞程度。 例如,允許用戶插入,更新,選擇等,但不要丟棄等。此外,正如提到的那樣,外部不應該訪問數據庫。 在共享主機環境中,這通常意味着只能從您的www服務器或localhost連接數據庫。

Re:kalpaitch,不要在一些可逆的哈希中傳遞你的密碼。 人們永遠不應該看到你的來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM