如果我的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错误,但这不是我想要做的。我想看到一个错误,但我不希望它打印密码。
答案 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());
}