gpt4 book ai didi

php - 安全传递密码(堆栈跟踪问题)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:38 25 4
gpt4 key购买 nike

我注意到我的开发服务器的 php_errors.log 文件在我之前的错误修复热潮后重新出现,但这次我注意到一些相当令人不安的事情......

[06-Jan-2016 01:29:29 UTC] PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /home/niet/public_html/classes/DB.class.php:14
Stack trace:
#0 /home/niet/public_html/classes/DB.class.php(14): PDO->__construct('mysql:host=loca...', 'niet', 'MY ACTUAL PASSWORD!', Array)
#1 /home/niet/public_html/classes/DB.class.php(47): DB::connect()
#2 ...

不用说,这是一个问题。所以基本上,我的问题很简单:

如果出现问题,我如何将字符串传递给函数,而不在堆栈跟踪中显示它?

为了变聪明,我尝试了这个:

new PDO(
"mysql:host=localhost.....",
"niet",
new class { public function __toString() { return "correct horse battery staple"; }}
);

虽然它成功连接到数据库,但抛出的异常(例如密码错误)仍然显示字符串值,而不是匿名类。如果我使用“普通”类尝试从跟踪中“隐藏”变量,则会出现类似的问题。

最佳答案

您可以设置自己的异常处理程序并只打印异常消息而不是堆栈跟踪,例如

function exception_handler($e) {
echo "<b>Exception in file: </b>" . $e->getFile() . "<br>";
echo "<b>Exception on line: </b>" . $e->getLine() . "<br>";
echo "<b>Exception message: </b>" . $e->getMessage();
}

set_exception_handler('exception_handler');

因此您仍然会收到一条有用的错误消息,但不包含任何敏感数据:

Exception in file: C:\xampp\htdocs\path\file.php
Exception on line: 220
Exception message: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using >password: YES)

关于php - 安全传递密码(堆栈跟踪问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680725/

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