Exception 当出现错误时,如何防止PHP脚本显示凭据或其他重要数据?
我试图以一种方式处理异常或错误,使它们不会脱口而出有关我的应用程序的任何重要细节。我想知道防止这种事情发生的最佳方法。从下面的代码片段中,您认为这会防止凭据被转储到屏幕上吗Exception 当出现错误时,如何防止PHP脚本显示凭据或其他重要数据?,exception,pdo,Exception,Pdo,我试图以一种方式处理异常或错误,使它们不会脱口而出有关我的应用程序的任何重要细节。我想知道防止这种事情发生的最佳方法。从下面的代码片段中,您认为这会防止凭据被转储到屏幕上吗 public static function exception_handler($exception) { die('Uncaught exception: '.$exception->getMessage()); } public function __construct() { $this-
public static function exception_handler($exception)
{
die('Uncaught exception: '.$exception->getMessage());
}
public function __construct()
{
$this->host = 'xxxxx';
$this->dbname = 'xxxxx';
$this->dsn = "host";
$this->username = 'xxxx';
$this->password = 'xxxx';
$this->opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
set_exception_handler(array(__CLASS__, 'exception_handler'));
parent::__construct($this->dsn, $this->username, $this->password, $this->opt);
restore_exception_handler();
}
是的,它会,但它几乎没有帮助,因为错误消息本身也会泄漏。 此外,仅为单行设置错误处理程序没有意义。你的应用程序中有很多类,有很多凭据和敏感信息。因此,您可以看出,您更希望防止任何泄漏,而不是您意外发现的唯一泄漏 所以,不要管你的数据库类
public function __construct()
{
$this->host = 'xxxxx';
$this->dbname = 'xxxxx';
$this->dsn = "host";
$this->username = 'xxxx';
$this->password = 'xxxx';
$this->opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
parent::__construct($this->dsn, $this->username, $this->password, $this->opt);
}
(尽管如此,最好还是别管PDO本身,因为您的类很可能感染了其中一些)
而站点范围的处理程序应该是这样的
set_exception_handler('exception_handler'));
public static function exception_handler($exception)
{
error_log("[$errno] $errstr in $errfile:$errline");
header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
die('Server error');
}
捕获错误,将其记录到磁盘,然后向用户输出一般错误消息。当他们报告错误时,支持人员可以检查日志。