【发布时间】:2011-04-19 18:18:52
【问题描述】:
我不是 PHP 开发人员,但我正在评估 PHP5 应用程序的安全性。
作者在函数之外的某些地方依赖extract($_POST)和extract($_GET)。
我的建议是调用extract($_POST, EXTR_PREFIX_ALL, 'form') 并相应地更改代码,但他的立场是任何变量都会在后续包含中重新定义。
我可以通过在帖子值中提供例如_ENV=something 来轻松更改超全局变量,但超全局变量是数组,我将它们转换为字符串,我不确定它是否会产生不良影响。
我可以看看isset() 的几个用法,然后从那里倒退。但我想有些攻击不需要知道或占卜来源。
是否有一些有趣的变量需要设置/更改,可能在 PHP 的内部?
谢谢
【问题讨论】:
-
唯一想到的就是以这种方式覆盖超全局(即在
$_POST中定义一个名为_SERVER的数组并将其提取到全局空间中)。那可能吗?它会覆盖$_SERVER吗?可能不会(我希望)。我得试试看。 -
是的,它至少适用于 _ENV。提供 EXTR_SKIP 可以解决这个问题。
-
(建议) 使用 Suhosin 可防止覆盖超全局变量并有助于缓解可能的攻击媒介。