2012-04-20 38 views
0

如果我的mongo數據庫關閉,我的php應用程序正在輸出明文密碼的錯誤。我怎樣才能防止這一點?Mongo/PHP - 連接失敗打印明文密碼

Fatal error: Uncaught exception 'MongoCursorException' with message 
'couldn't send command' in /ap/db.php:23  Stack trace: 
#0 /ap/db.php(23): MongoDB->authenticate('username', 'actual_password') 
#1 /ap/index.php(6): Worker->__construct() #2 {main} thrown in /ap/db.php 
on line 23 

我明白我可以禁用php錯誤,但那不是我想要做的。我想看到一個錯誤,但我不希望它打印密碼。

+1

將其記錄到文件並關閉顯示的錯誤。 – MetalFrog 2012-04-20 15:40:01

回答

1

在生產應用程序中,用戶應該會看到類似「Uncaught exception」或其他面向開發人員的消息的錯誤。這會向潛在的攻擊者暴露很多信息並混淆您的合法用戶。記錄詳細的技術信息並向用戶顯示友好的錯誤頁面。

要禁用可見錯誤並記錄他們,而不是編輯php.ini

  • 設置error_log爲一個有效的日誌路徑
  • 設置display_errors

啓用友好錯誤的過程取決於您的Web服務器,但想法是一樣的:設置一個自定義頁面以在遇到500錯誤時顯示。例如,在Apache中,您設置了ErrorDocument 500 /path/to/custom/500.html

編輯:

OP表示這是一個發展箱—無論哪種方式,你應該包裝在try/catch塊,連接嘗試(這是你本來也應該這樣做),然後就可以顯示'消毒'錯誤消息:

try { 
    MongoDB->authenticate('username','password'); 
} catch (MongoCursorException $e) { 
    die("Unable to authenticate to database [code: " . $e->getCode() . "]: " 
    . $e->getMessage()); 
} 
+0

謝謝,我明白這一點。這是一個開發服務器,我想在這種情況下顯示錯誤而不是記錄它們。我想知道是否可以防止密碼打印出來,而不會阻止打印所有錯誤。 – axiomx11 2012-04-20 15:49:54

+1

發現異常,然後根據信息做任何你想做的事情。 – 2012-04-20 16:11:00

+0

謝謝,異常技巧應該可以工作。 – axiomx11 2012-04-20 18:19:40