0

私の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エラーを無効にできることは理解していますが、それは私がやりたいことではありません。エラーを表示したいのですが、パスワードを出力したくありません。

4

1 に答える 1

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());
}
于 2012-04-20T15:43:22.047 に答える