2016-11-21 17 views
0

我希望debug_print_backtrace不打印敏感函數參數。我幼稚的解決方案不起作用。如何從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仍然希望在跟蹤中顯示任何未受保護的參數。

是否有任何非哈克的方法來隱藏跟蹤中的這個論點?從設計角度來看,我真的希望函數在本地知道哪些參數需要保護,而不是寫一個新的回溯函數,它知道所有敏感參數在哪裏。

回答

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」 指數, 因此,所有的函數/方法參數,以節省內存。

+0

我想保留參數,只是隱藏*一些*。 – spraff

+0

困擾,不是問題;看到我的第二個答案。 –

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參數,所以它是按引用傳遞。

+0

這有一個討厭的[副作用](http://pastebin.com/jAJXjJWx):-( – spraff