2012-04-16 73 views
13

可能重複:
How to secure database passwords in PHP?如果把數據庫中的敏感信息

最近我得到了它應該在PHP做一個網站項目,但我沒有太多PHP使用經驗。無論如何,它已經開始運行,但是還有很大的改進空間。我感覺不舒服的一件事是我處理數據庫的方式:我將數據庫連接信息放在一個單獨的db.php文件中,並將其包含在需要的地方。但我記得一次看到服務器返回的PHP源文件。

所以現在我的問題是:什麼是更好或最好的方式/地方放置數據庫敏感數據?

順便說一下,怎麼不讓PHP在網頁出現錯誤消息時出現錯誤?自定義錯誤頁面或設置在php.ini中的某處?謝謝!

注:我在使用PHP的老風味不是面向對象的方式。但我打開面向對象或MVC的方式,如果有更好的方法是方式爲將來的項目

+0

好,重要的問題! +1爲安全考慮。 – David 2012-04-16 14:38:05

+4

順便說一下,['display_errors'](http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors)應該**始終**設置爲關閉'在生產服務器上。這樣,PHP會拋出500錯誤而不是顯示實際的錯誤。 – 2012-04-16 14:42:27

+0

我猜在PHP中display_errors = off。ini應該防止出現任何錯誤 – anuragsn7 2012-04-16 14:42:31

回答

7

我不知道如果這是你在找什麼準備:
你可以把你的敏感數據在你的db.php中,但在web根目錄(public_html或www)之外。

例如,您可能有一個名爲config的目錄,它是您的Web根目錄的兄弟,並將您的db.php文件存儲在那裏。

您可以包括你的db.php中的文件是這樣的:

require_once('../config/db.php'); 

我希望這有助於。

+2

+1解決方案,也不要忘記將此文件的權限更改爲最低但仍可由Web服務器讀取。如果該文件是由網絡服務器進程擁有的,那麼'0600'可能足夠安全? – 2012-04-16 14:47:37

1

很好,把它放在一個db.php文件中,只需在每個文檔的開始<?php標籤後面使用require_once()即可。

如果basedir限制不起作用,請將db.php文件移到您的web/ftp根目錄之外,這種方式絕對不能通過http/ftp訪問。確保在這個文件上權限設置正確。

由於您沒有爲您的代碼使用OOP或MVC結構,因此這是最佳路線。

2

我會親自創建一個名爲db.php中,並把這個上面的public_html文件夾服務器

上例如

<?php 
    error_reporting(0); 
    $link = FALSE; 
    $link = mysql_connect('hostname', 'username', 'password'); 
    if (! $link) 
    { 
     die("Couldn't connect to mysql server!"); 
    } else { 
     mysql_select_db('databasename'); 
    } 
?> 

這將關閉錯誤報告在同一時間連接到您的數據庫,從你的index.php你會包括這樣的文件:

<?php require('../db.php'); ?>