Php 如何防止PDO错误导致密码转储
我的MySQL数据库中有太多主机PDO异常:Php 如何防止PDO错误导致密码转储,php,mysql,pdo,Php,Mysql,Pdo,我的MySQL数据库中有太多主机PDO异常: exception 'PDOException' with message 'SQLSTATE[HY000] [1129] Host '[IP ADDRESS]' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'' in /var/www/libs/Database.php:15 我理解这个错误,但真正的问题在于堆栈跟踪,它
exception 'PDOException' with message 'SQLSTATE[HY000] [1129] Host
'[IP ADDRESS]' is blocked because of many connection errors; unblock
with 'mysqladmin flush-hosts'' in /var/www/libs/Database.php:15
我理解这个错误,但真正的问题在于堆栈跟踪,它将数据库名称、登录名和密码转储到控制台中:
Stack trace:
#0 /var/www/libs/Database.php(15): PDO->__construct('mysql:host=conf...',
'[db name]', '[db password]...', Array)
由于这是一个AJAX请求,它会转储到控制台浏览器中,这显然是一个问题
我怎样才能避免这种情况发生?我是否错误地配置了PHP
由于这是一个AJAX请求,它将转储到控制台浏览器中
当然,PHP(和其他服务器端语言一样)是在另一台计算机上执行的,不能访问浏览器的控制台。最有可能的是,PHP和JavaScript都不是为优雅地处理错误条件而设计的。一些提示:
- 在生产框中始终将“显示错误”设置为false。请确保改为记录错误消息
- 调整服务器端代码,使其即使在数据库关闭时也能生成有效的输出。例如,如果脚本应该生成JSON,那么即使出现错误,它也应该发送JSON数据。为此:
- 捕获
pdo异常
- 记录错误详细信息
- 发送JSON数据,通知存在错误,例如:
{"status": "error", "info": "Database is down"}
- 捕获
- 调整客户端代码以处理AJAX响应中的任何类型的错误,包括status=error的正确JSON和缺少正确JSON
/var/www/libs/Database.php
,如果他想。。。在我看来,只要日志留在服务器上,并且不与任何人共享(通过电子邮件或其他方式),就可以了。更好地处理错误。PDO抛出PDOException
的实例,因此捕获这些实例并优雅地处理它们。任何原始错误消息都不应输出到生产网站上,而应使用不可公开访问的错误日志文件。@André这是一个AJAX请求,因此转储到浏览器控制台Relevant中。捕获异常或将错误报告设置配置为不可见地输出错误。可能存在重复的