我希望debug_print_backtrace不打印敏感函数参数。我天真的解决方案并不奏效。
<?php
function err ()
{
debug_print_backtrace ();
}
function foo ($secret_arg, $arg)
{
$arg = $secret_arg;
$secret_arg = "<HIDDEN>";
err ();
}
foo ("mysecret", 123);
?>
此输出
#0 err() called at [/tmp/x.php:13]
#1 foo(mysecret, 123) called at [/tmp/x.php:16]
即使我在函数中覆盖了$secret_arg
,但回溯显示它仍然包含"mysecret"
。
但是我 DO 仍然希望在跟踪中显示任何未受保护的参数。
是否有任何非hacky方法可以隐藏此参数?从设计的角度来看,我真的希望函数在本地知道要保护哪些参数,而不是编写一个新的回溯函数来知道所有敏感参数的位置。
答案 0 :(得分:0)
从PHP 5.3.6开始,您可以这样做:
debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
来自http://php.net/manual/en/function.debug-print-backtrace.php:
DEBUG_BACKTRACE_IGNORE_ARGS是否省略“args”索引, 以及所有的函数/方法参数,以节省内存。
答案 1 :(得分:0)
你几乎拥有它:
function err()
{
debug_print_backtrace();
}
function foo(&$secret_arg, $arg)
{
$arg = $secret_arg;
$secret_arg = "<HIDDEN>";
err();
}
$secret = 'mysecret';
foo($secret, 123);
打印:
#0 err() called at [/var/www/sites/portal.net2grid.com/test.php:32]
#1 foo(<HIDDEN>, 123) called at [/var/www/sites/portal.net2grid.com/test.php:37]
#2 require_once(/var/www/sites/portal.net2grid.com/test.php) called at [/var/www/sites/portal.net2grid.com/dispatch.php:73]
#3 __portal_dispatch() called at [/var/www/sites/portal.net2grid.com/dispatch.php:6]
我所做的是改变了你的$secret_arg
论点,以便通过引用传递。