![](/img/trans.png)
[英]How to store credentials for basic HTTP authenication into the database on server side?
[英]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仍然可以通過include
或require
來訪問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.