2012-01-26 118 views
2

我有一个传统的应用程序,它会大量使用extract()函数。在不可信数据上使用EXTR_SKIP标志(例如extract($array_of_stuff, EXTR_SKIP))是非常安全的做法,以避免恶意用户覆盖现有变量。当然,我的传统应用程序没有这样的事情。是否可以将EXTR_SKIP设置为PHP的extract()的默认行为?

所以我的问题是,有没有什么办法可以将EXTR_SKIP设置为extract()的默认行为?我仍然在经历并手动指定它,但是如果我可以在全局范围内设置,我现在更愿意这样做,以便在我酝酿时提高应用程序的安全性。

+0

你使用PHP> = 5.3.0吗? – DaveRandom 2012-01-26 22:47:17

+0

据我所知(除非使用runkit,这对生产来说不是个好主意)。你不能只是定义一个新的函数,并使用'find -iname'* .php'-exec sed --in-place = backup.php s/\ bextract \(/ newfunc \(/ g {} \;' ? – Wrikken 2012-01-26 22:51:52

+0

@DaveRandom:PHP> = 5.3,你的意思是使用命名空间?棘手,因为提取到达当前范围,而不是全局范围..所以除非一切都是全局的,否则它不起作用 – Wrikken 2012-01-26 23:00:22

回答

2

我会说答案是否定的。一个简单的包装功能是最好的,所以grep等是这种方式去。即使您更改了默认行为,但如果您运行的任何第三方库使用extract并且期望正常的默认行为,那么这是一个坏主意。如果你没有运行第三方库,那就足够公平了,但是还没有办法做到这一点。

相关问题