gpt4 book ai didi

php - 未捕获的 PDOException 泄露用户名和密码

转载 作者:行者123 更新时间:2023-11-29 15:20:20 25 4
gpt4 key购买 nike

try {
self::$dbinstance = new PDO(
"mysql:host=$c[host];dbname=$c[dbname]", $c['user'], $c['password']
);

self::$dbinstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo "Errors" . $e->getMessage();
}

在上面的代码中,如果 PDO 无法连接到主机,则会发生 fatal error ,从而泄露用户名和密码。

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003]
Can't connect to MySQL server on '172.25.102.65' (10060)' in
D:\xampp\htdocs\mytest\wh_client_2.1\classes\importmodule-class.php:33 Stack trace: #0
D:\xampp\htdocs\mytest\wh_client_2.1\classes\importmodule-class.php(33): PDO-
>__construct('mysql:host=172....', 'host', 'password') #1

一种可能的方法是在 php.ini 中关闭 display_error=0 ,但这样我就无法知道我的主机何时没有响应.

有办法修改错误消息吗?

最佳答案

错误处理和错误报告之间存在差异。

  • 错误处理是防止最终用户看到任何堆栈跟踪、重要信息或自动生成的错误消息的过程。它还可以通过使用 try catch block 来修改脚本的运行方式。
  • 错误报告定义给定脚本将报告哪些信息。

为了正确处理错误,我认为 ini_set('display_errors',0); 是更好的方法。您不希望屏幕上显示任何错误消息。

但是,我希望获得有关错误的所有可能信息,因此我使用 error_reporting(E_ALL);

错误被写入文件 error_log 中,该文件通常与您的 index.php(或直接调用的任何 PHP 文件)位于同一级别。您还可以从 cPanel 访问它。

<小时/>

您的错误可能未被捕获,因为您的代码位于命名空间中,而您想要捕获全局命名空间PDOException。使用 \ 指示您正在查找全局 PDOException 的脚本。一旦发现错误,您可以使用PDOException class的正常方法回显您想要的内容。 .

try {
$db = new PDO (/*connection infos*/);
}
catch (\PDOException $e) {
switch ($e->errorCode()) {
case 'HY000':
// Or whatever error you are looking for
// here it's the general error code
mail('your@email.com','connection problem',$e->getTraceAsString());
$db = new PDO (/*rollback connection infos of a local database*/);
break;
}
}

这会向您发送一封邮件,其中包含错误的痕迹,防止您的用户在告诉您出现问题时看到它。

这里是the reference PDO 语句返回的错误代码。

关于php - 未捕获的 PDOException 泄露用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com