【问题标题】:Is it possible to set EXTR_SKIP as the default behavior for PHP's extract()?是否可以将 EXTR_SKIP 设置为 PHP 的 extract() 的默认行为?
【发布时间】: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 找到了所有内容并进行了更改。但我仍然想知道是否有办法覆盖默认提取行为,所以我将问题留待解决。

标签: php security extract


【解决方案1】:

我会说答案是否定的。一个简单的包装函数是最好的,所以 grep 等是继续这个的方法。即使您更改了默认行为,如果您正在运行任何使用 extract 并期望正常默认行为的第三方库,那也是一个坏主意。如果您没有运行第三方库,这很公平,但除了 hack afaik 之外,仍然没有办法做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2014-10-15
    • 2011-10-15
    • 2021-07-22
    • 2019-04-05
    • 2017-06-09
    • 2016-02-07
    • 2021-06-14
    相关资源
    最近更新 更多