php - 为什么连接失败时 PDO 会打印我的密码?

标签 php mysql security connection pdo

我有一个简单的网站,我使用 PDO 建立与 MySQL 服务器的连接。

$dbh = new PDO('mysql:host=localhost;dbname=DB;port=3306',
               'USER',
               'SECRET', 
               array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

我的网站有一些流量,并且达到了服务器的连接限制,网站抛出了这个错误,里面有我的 plain 密码!

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08004] [1040] Too many connections' in /home/domain/html/index.php:xxx Stack trace: #0 /home/domain/html/index.php(64): PDO->__construct('mysql:host=loca...', 'USER', 'SECRET', Array) #1 {main} thrown in /home/domain/html/index.php on line 64

具有讽刺意味的是,出于安全原因我切换到 PDO,所以这真的让我感到震惊,因为在大多数网站上,使用简单的 HTTP 泛洪很容易引发这个确切的错误。

我现在已经将我的连接包装在一个 try/catch block 中,但我仍然认为这是灾难性的!

我是 PDO 的新手,所以我的问题是:我必须做些什么才能确保安全?如何以安全的方式建立连接?是否还有其他我必须注意的已知安全漏洞?

最佳答案

无论如何,您的 PHP.ini 中都应该有 display_errors = off 以避免这个问题。除了 PDO 之外,揭示此类细节的错误还来自许多地方。

是的,您还应该将它放在 try/catch block 中。

您也可以$pdo->setAttribute(PDO::ERRMODE_SILENT),但是您需要手动检查错误代码,而不是使用 try/catch block 。见 http://php.net/manual/en/pdo.setattribute.php获取更多错误常量。

关于php - 为什么连接失败时 PDO 会打印我的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455018/

相关文章:

mysql - 如果 where 条件位于连接表上,我会得到重复的结果吗?

java - 我可以确定我的 Java Web 应用程序在本地主机 :8080 is invisible from my fellow Starbucks customers? 上运行吗

security - typekit 是否存在安全风险?

php - Magento升级脚本不升级

php - "yield"在表达式上下文中有何用途?

php - 当数据发送到 mySQL 时如何将数据添加到特定表单元素

PHP cURL HTTP GET XML 格式

mysql事务问题

php - 从 2 个数组中选择下一个事件

javascript - 如何从另一个站点安全地将表单发布到 django 站点