【发布时间】:2012-01-26 22:39:08
【问题描述】:
我有一个旧版应用程序,它大量使用 extract() 函数。在不受信任的数据上使用 EXTR_SKIP 标志(例如extract($array_of_stuff, EXTR_SKIP))是一种很好的安全做法,以避免恶意用户覆盖现有变量。自然,我的旧版应用程序不会做这样的事情。
所以我的问题是,有什么方法可以将 EXTR_SKIP 设置为 extract() 的默认行为?我仍在手动指定它,但如果我可以在全局范围内设置它,我现在更愿意这样做以提高应用程序的安全性,同时我正在努力。
【问题讨论】:
-
据我所知没有(除非使用 runkit,这在生产中不是一个好主意)。你不能只定义一个新函数并使用
find -iname '*.php' -exec sed --in-place=backup.php s/\bextract\(/newfunc\(/g {} \;吗? -
@DaveRandom: 使用 PHP>=5.3,你的意思是使用命名空间吗?棘手,因为 extract 进入当前范围,而不是全局范围。所以除非一切都是全局的,否则它不起作用。
-
是的,我使用的是 PHP 5.3.2。我现在或多或少地完成了这个过程——我用 grep 找到了所有内容并进行了更改。但我仍然想知道是否有办法覆盖默认提取行为,所以我将问题留待解决。