2014-01-11 31 views
0

目前的文件,我連接到一個數據庫使用以下:商店file_put_contents在安全的位置

<?php 

    try 
    { 
     $dbh = new PDO(
      'mysql:host=localhost;port=3306;dbname=databaseName', 
      'databaseUser', 
      'databaseUserPassword'); 

     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    } 
    catch(PDOException $e) 
    { 
     echo "I'm sorry, Dave. I'm afraid I can't do that."; 
     file_put_contents('PDOErrors.txt', "\n" . $e->getMessage(), FILE_APPEND | LOCK_EX); 
    } 

    ?> 

這個文本文件寫入到同一位置這個PHP文件,這是對我的公開可用網站。雖然此位置未明確向用戶披露,但如果有人發現此位置(即example.com/PDOErrors.txt),則他們將能夠很好地查看該文件的內容。

我的問題:這是處理這個問題的正確方法嗎?我可以用密碼保護目錄嗎?我可以將該文件寫入網站之外的某個不公開的網站(例如網站上方的根文件夾)嗎?

我需要能夠訪問PHP文件來訪問我的數據庫(我在排行榜類型的東西的遊戲裏面這樣做),但輸出文件應該只對我有用。

+1

簡單的回答:如果你不想通過網絡獲得某些東西,那麼不要把它放到可通過網絡訪問的地方。永遠不要在網站的文檔根目錄中存儲任何「私密」內容。 –

+1

您的文檔根目錄中的唯一文件應該是公共文件,僅此而已。在大多數情況下,你只能在那裏找到一個'/ img','/ js','/ styles'和'/ index.php',它只包含'<?php require __DIR__。 '/../ bootstrap.php';' – PeeHaa

+0

我不會去使用密碼保護,因爲發生什麼風險,是每次你/腳本想要寫入文件,它都會要求每次都有一個密碼。最好將它從「公共」中完全放出,並將其深深地放在除「public」外的任何其他外部文件夾中。我確信還有其他的方式,但那是其中之一。 –

回答

1

一個好辦法做到這一點是把一切不應該從外部接近不能達到一個文件夾中。

例如你有一個結構:

/nameofproject 
    - /data 
    - /logs 
    - /library 
    - /public 
    - index.php <- www.example.com would point to this 

那麼你就必須配置您的虛擬主機和您的.htaccess。你可以看看Symfony 2或Zend Framework 2他們是如何做到的。

0

.htacces爲您保護的文件夾代碼:

order deny,allow 
deny from all 
+2

現在我將我的網站移動到一個nginx服務器。現在怎麼辦? – PeeHaa

+0

我很想知道你在說什麼,關於'nginx' @PeeHaa –

+2

很簡單@ Fred-ii-沒有任何支持nginx中的htaccess文件:) – PeeHaa