Mongo / PHP - 连接失败打印明文密码

时间:2012-04-20 15:25:39

标签: php mongodb

如果我的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 个答案:

答案 0 :(得分:1)

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

要停用可见错误并将其记录下来,请修改php.ini

  • error_log设置为有效的日志路径
  • display_errors设置为关闭

启用友好错误的过程取决于您的Web服务器,但想法是相同的:设置在遇到500错误时显示的自定义页面。例如,在Apache中,您设置了ErrorDocument 500 /path/to/custom/500.html

编辑:

OP表示这是一个开发框 - 无论哪种方式你应该在try / catch块中包装你的连接尝试(这是你应该做的事情),然后你可以显示一个'sanitized'错误信息:< / p>

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