我对PHP 的 PDO 类感到恼火。正如您在警告说明中看到的:如果未捕获到异常,默认情况下它会显示数据库密码(当出现显示错误时,对于新手网站管理员来说,在生产服务器中很可能出现这种情况)。
这是我与 PHP 开发人员的争论
我:
泄露密码是很不寻常的,因为 MySQL 本身隐藏密码以进行调试或发生错误时。例如,MySQL 的典型输出是“用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)”它从不显示密码。
正如我们所知,许多使用依赖 PDO 的第三方软件的新手程序员或最终用户可能并不关心 display_errors 是否被关闭。
我认为这是一个安全风险。例如,恶意用户可以运行爬虫并使用字符串“Fatal error: Uncaught exception 'PDOException'”搜索网站,他们现在可以获取密码。
我希望你考虑到这一点。
PHP 核心开发:
是的,使用 display_errors=on 运行生产服务器并使用参数打印回溯是一种安全风险。这就是为什么你永远不应该这样做。
PHP Core Dev 似乎更愿意依靠最终用户来关闭错误显示。尽管他们发出了警告,但鉴于 MySQL 本身(一个 PDO 正在抽象)没有透露密码而 PDO 更愿意透露密码,这似乎仍然是不可接受的。
您认为 PHP 核心开发人员在错误时泄露密码方面是正确的吗?