PHP - 变量覆盖 - extract()

https://chybeta.github.io/2018/11/29/phpcms-2008-type-php-%E5%89%8D%E5%8F%B0%E4%BB%A3%E7%A0%81%E6%B3%A8%E5%85%A5getshell%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/

这个函数 是因为看了下 PHPcms 前台 getshell 发现这些函数果然一个都不能漏。

该函数官方文档 在此 http://php.net/manual/zh/function.extract.php ,多翻官方文档,好多人跟我说过这个习惯 :)

 

原因 无非是 变量覆盖,至于 能造成什么危害 就看下边代码怎么写了。

int extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] )


Flags
    EXTR_OVERWRITE
    如果有冲突,覆盖已有的变量。
    EXTR_SKIP
    如果有冲突,不覆盖已有的变量。
    EXTR_PREFIX_SAME
    如果有冲突,在变量名前加上前缀 prefix。
    EXTR_PREFIX_ALL
    给所有变量名加上前缀 prefix。
    EXTR_PREFIX_INVALID
    仅在非法/数字的变量名前加上前缀 prefix。
    EXTR_IF_EXISTS
    仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。 举个例子,以下情况非常有用:定义    一些有效变量,然后从 $_REQUEST 中仅导入这些已定义的变量。
    EXTR_PREFIX_IF_EXISTS
    仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
    EXTR_REFS
    将变量作为引用提取。这有力地表明了导入的变量仍然引用了 array 参数的值。可以单独使用这个标志或    者在 flags 中用 OR 与其它任何标志结合使用。
    如果没有指定 flags,则被假定为 EXTR_OVERWRITE。

 

你可能感兴趣的:(code,审计)