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

穆罕默德·哈西卜·汗
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

一种可能的方法是display_error=0关闭中的php.ini,但是这样,当主机没有响应时,我将无法得知。

有什么方法可以修改错误消息?

菲利克斯·加格农·格里尼尔

错误处理和错误报告之间有区别。

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

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

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

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


您的错误可能未被捕获,因为您的代码位于名称空间中,而您想捕获全局名称空间PDOException使用a\表示您要寻找全局脚本PDOException一旦发现错误,就可以使用PDOException类的常规方法来回显所需的内容

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('[email protected]','connection problem',$e->getTraceAsString());
            $db = new PDO (/*rollback connection infos of a local database*/);
            break;
    }
}

这将向您发送一封包含错误痕迹的邮件,从而防止您的用户在告诉您某些错误时看到它。

这是PDO语句返回的错误代码的参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

用户名和密码字段未显示

来自分类Dev

Windows用户名和密码

来自分类Dev

Magit保存密码和用户名

来自分类Dev

Kubernetes主用户名和密码

来自分类Dev

从MySQL验证用户名和密码

来自分类Dev

lxc容器:密码和用户名

来自分类Dev

验证用户名和密码

来自分类Dev

验证用户名和密码

来自分类Dev

php设置用户名和密码

来自分类Dev

Ajax验证用户名和密码

来自分类Dev

注册用户名和密码

来自分类Dev

Xcode:存储用户名和密码

来自分类Dev

检查用户名和密码 PHP

来自分类Dev

用户名和密码检查

来自分类Dev

Jackrabitt:设置用户名和密码

来自分类Dev

如何以角度捕获错误的密码/用户名响应?

来自分类Dev

C程序未读取用户名和密码的.txt文件

来自分类Dev

Android 未连接到数据库以检查用户名和密码

来自分类Dev

APT代理设置未传输用户名/密码

来自分类Dev

正确的用户名密码未登录django

来自分类Dev

使FreeRDP提示用户输入用户名和密码?

来自分类Dev

使FreeRDP提示用户输入用户名和密码?

来自分类常见问题

git push命令中的用户名和密码

来自分类Dev

如何在Git中保存用户名和密码?

来自分类Dev

在MYSQL中更改用户名和密码

来自分类Dev

Jenkins在Openshift上的用户名和密码

来自分类Dev

如何获取CouchDB用户名和密码

来自分类Dev

curl:提供apache .htaccess文件的用户名和密码