【发布时间】: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
堆栈跟踪:
#0C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php(49):MySQL->__construct('localhost', 'miniticket', 'mtu:r!Nj@~qR6f9...')
#1C:\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