【问题标题】:Too much information, PHP error?信息太多,PHP报错?
【发布时间】:2012-01-12 22:29:35
【问题描述】:

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

致命错误: 未捕获的异常 'Exception' 带有消息 'Failed to 连接到数据库。在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): require_once('C:\Program File...')
#2 {main} 抛出 C:\Program 文件 (x86)\Apache 软件 Foundation\Apache2.2\htdocs\MiniTicket\database.php 上线 16

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

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

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

【问题讨论】:

  • 是否有可能捕获异常(并在您收到“无法连接到数据库”时生成您自己的错误消息)?
  • @nickb:我不想那样做,因为这个类将无处不在,并且可能以不同的方式处理异常。我想我可以只用die 代替,但感觉不太干净,尤其是在可以进行错误恢复的情况下。
  • 您始终可以捕获异常并抛出您自己的异常,该异常仅包含原始异常中的 Exception::getMessage,其堆栈跟踪中没有密码。
  • 如果主机既没有mysqli也没有PDO,是时候切换主机了。
  • @outis:跟主机无关。我正在制作开源软件,我需要为各种 RDBMS 系统换入database.php

标签: php mysql security sensitive-data


【解决方案1】:

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

【讨论】:

  • 好的,我试试看。有没有简单的方法来转移消息?
  • @minitech:您可以将所有错误转换为异常(这会使警告默认崩溃),然后使用自定义异常处理程序将它们记录到文件中。你也可以使用 PHP 的error_log
【解决方案2】:

编辑你的 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 更改生效。

【讨论】:

  • @nickb 请重新阅读并更新您的评论。我添加了一条关于此only 在生产环境中完成的注释。谢谢!
  • 是的,虽然这是开发...这是一个不错的解决方案,但无论如何我都更愿意隐藏有关开发的消息。
  • @minitech 仅供参考,我通常在工作时关闭 display_errors 和 tail 日志文件进行开发。您显然处于 Windows 环境中,所以我不知道这是否适合您。如果你想试试这个,谷歌“linux tail for windows”。
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2022-10-21
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多