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

在生产应用程序中,用户永远不会看到像“未捕获异常”这样的错误或其他面向开发人员的消息。这会将大量信息暴露给潜在的攻击者,并使您的合法用户感到困惑。记录详细的技术消息并向用户显示友好的错误页面。

要禁用可见错误并改为记录它们,请编辑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 回答