信息太多,PHP错误?

时间:2011-12-05 04:19:15

标签: php mysql security sensitive-data

我正在为MySQLi制作mysql_函数的自定义包装器,例如:不可用,当它无法连接时,它会抛出异常。但是,致命错误输出是:

  

致命错误:未捕获的异常'异常',消息'失败   连接数据库。'在C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php中:16
堆栈跟踪:

#0   C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php(49):   MySQL->__construct('localhost', 'miniticket', 'mtu:r!Nj@~qR6f9...')
#1   C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\index.php(3):   在{strong> C:\ Program中抛出了require_once('C:\Program File...')
#2 {main}   文件(x86)\ Apache软件   Foundation 在线 16

如您所见,我的数据库密码清晰显示,供所有人查看。不好。我不想关闭这些消息,特别是在开发中,但我不希望显示敏感信息。使用set_error_handler也不是一个很好的解决方案,因为我必须解析所有内容,而且容易出错。

那么......是否有一种简单的方法可以在错误消息中的函数中禁用参数的显示,最好是通过PHP而不是某些配置文件?

编辑:禁用除文件名之外的文件路径也是一个奖励。

2 个答案:

答案 0 :(得分:1)

您应该将生产和开发之间的错误处理分开,其中开发显示错误信息,生产显示友好的错误消息,但不输出PHP的任何内容。将输出记录到文件中。

答案 1 :(得分:1)

编辑你的php.ini并设置

display_errors = 0

如果您无权访问php.ini,则需要在脚本的顶部添加:

ini_set("display_errors", "0");

请参阅http://php.net/manual/en/errorfunc.configuration.phphttp://php.net/manual/en/function.error-reporting.php

这将阻止所有错误输出到浏览器,并且应该只能在您的生产系统上完成。确保您仍然记录错误(通过php.ini设置)。

我不确定为什么这不是默认配置,因此在生产环境中不会发生这种情况。

不要将此视为软件问题的解决方案,但这只是为了阻止敏感数据向公众显示。

请注意,您可能需要重新启动Apache才能使php.ini更改生效。