我有一个简单的网站,我使用 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/