簡體   English   中英

PHP /服務器端:如何正確隱藏數據庫憑據文件

[英]PHP/Server Side: How to properly conceal database credentials files

在隱藏PHP類所需的數據庫憑據時,我遇到了很多問題。 到目前為止,推薦的“解決方案”都沒有奏效。

1)PHP手冊建議將憑據保存在其他文件中:檢查! 我所有的PHP數據庫類都從其他文件插入憑據。

典型的數據庫類

class database{
private static $dbc = null;

public static function get($page,$component = null){
    if(self::$dbc === null) {
        $root = $_SERVER['DOCUMENT_ROOT'];
        $path = '/some path/';
        $file = 'pdo.php';
        require( $root . $path . $file );
    }
 ...more code...

憑證文件

$dbhost = 'some.host';
$dbname = 'someDBname';
$dbuser = 'someUser';
$dbpass = 'somePassword';

2)盡管如此,我將所有信息保存在網絡主機中的文件仍然可以被嗅探或找到。

如何隱藏此包含數據庫信息的文件,以擁有真正安全的網站和數據庫?

我建議將它們放在環境變量中。 你可以getenv

你可以將它們通過或者.env (Symfony和Laravel都使用這樣的: 實例 )文件,或在.htaccess文件作為說明在這里

獎勵:如果您偏執狂,可以撒鹽並使用哈希密碼(如此處所述) 但是我懷疑這會發生很大變化。


編輯:在注釋中,@ deceze建議不要將憑證文件存儲在文檔根目錄中。 這絕對是您應該遵循的。

讓我詳細說明。 假設您的網域example.com指向www/foo/bar/example.com/ ,而不是像www/foo/bar/example.com/db.php那樣將文件存儲在其中,而是將其存儲在www/foo/bar/db.php不能通過瀏覽器訪問,但是PHP仍然可以通過includerequire來訪問ist。 您可以在路徑中添加..以返回一個文件夾。 如果您將其放在文檔根目錄中,則可以使用http://example.com/db.php對其進行訪問,並且如果您的服務器配置不正確(或者您使用的是db.yml類的其他形式),可以提供文件,從而公開您的憑據注意: db.php文件只是一個示例。 如上所述,我強烈建議您使用環境變量!


編輯2:堅持使用示例和PHP解決方案,而不使用環境變量。 您可以使用如下形式:

// the db class
class database{
    private static $dbc = null;

    public static function get($page,$component = null){
        if(self::$dbc === null) {
            $root = $_SERVER['DOCUMENT_ROOT'];
            $path = '/../db/';
            $file = 'pdo.php';
            require( $root . $path . $file );

            self::$dbc = new PDO($dsn, $dbUser, $dbPass);
        }

        return self::$dbc;
    }
}

// the pdo.php file
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$dbUser = 'dbuser';
$dbPass = 'dbpass';

文件結構將類似於

www
  foo
    yourwebsite
      .htaccess
      index.php
      foobar.php
    db
      pdo.php

該網站example.com將指向www/foo/yourwebsite

暫無
暫無

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

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