如何隐藏php debug_print_backtrace中的函数参数

时间:2016-11-21 11:34:07

标签: php

我希望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方法可以隐藏此参数?从设计的角度来看,我真的希望函数在本地知道要保护哪些参数,而不是编写一个新的回溯函数来知道所有敏感参数的位置。

2 个答案:

答案 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论点,以便通过引用传递。