事情的起因是这样子的,最近看到一道题,问的是
<?php $_POST['a']($_POST['b']);?>

这句代码有什么问题,答案很明显因为PHP的可变函数这个特性,导致了任意代码执行,但是当时做实验的时候构造的a=eval&b=phpinfo()却返回了如下的结果

提示eval是个未定义的函数,然后改用了a=assert&b=phpinfo()却能执行成功,为此查了PHP的手册,有关可变函数的部分:

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

这么看来eval其实并不能算是‘函数’,而是PHP自身的语言结构,如果需要用‘可变’的方式调用,需要自己构造,类似这样子的:

<?php
function eval_1($str)
{eval($str);
}$a='eval_1';
$a('phpinfo()');
?>

转载于:https://www.cnblogs.com/debugzer0/p/4858715.html

有关PHP的可变函数相关推荐

  1. PHP中可变变量和php可变函数到底有什么用?

    什么是可变变量? PHP提供了一种其他类型的变量--可变变量.可变变量允许我们动态地改变一个变量的名称. 可以看到,在这方面,PHP具有非常大的自由度--所有的语言都允许改变变量的值,但是并没有太多的 ...

  2. php的可变函数,php之可变函数的实例详解

    php之可变函数的实例详解 php的可变函数,今天大概的了解下,是看php手册总结的,觉得用处不大: PHP 支持可变函数的概念.这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数, ...

  3. php可变函数代码,PHP可变函数

    PHP支持可变函数的概念.通常用在回调函数.函数列表或者根据动态参数来调用不同的函数. 那么如何使用呢? #定义三个函数 function apple() { echo "I'm an ap ...

  4. PHP的学习--可变函数

    PHP 支持可变函数的概念.这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它.可变函数可以用来实现包括回调函数,函数表在内的一些用途. 可变函数不能用于例如 ech ...

  5. 浅谈C语言参数可变函数的实现

    1.需要的头文件:stdarg.h   需要的宏:va_start(a,b)    va_arg(a,b)    va_end(a)   需要的类型别名: va_list 2.基本用法   (1)写函 ...

  6. PHP 可变函数经典用法

    <?phpfunction map($fun, $list,$params=array()){$acc=NULL;$last=array_push($params, NULL,$acc)-1;f ...

  7. mysql不定参数函数_可变参数函数(一)

    一个函数可以接受不定数的参数个数,这就是可变参数函数,比较常见的比如printf(),scanf(): printf(const char*format,-); printf("%d&quo ...

  8. 编写可变参数函数 c语言,C语言可变参数函数的编写

    1. 引言 C语言我们接触的第一个库函数是 printf("hello,world!");其参数个数为1个. 然后,我们会接触到诸如: printf("a=%d,b=%s ...

  9. C/C++可变参数函数

    一.C可变参数函数 一般我们编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的实际参数.但在某些情况下我们希望函数的参数个数可以根据需要确定,因此c语言引入可变参数函数. ...

  10. php函数的默认值,php函数指定默认值方法的小例子

    php函数指定默认值方法的小例子 本节内容: php函数指定默认值 在php编程中,为自定义函数设定默认值,当用户调用该函数时,如果不给参数指定值,参数会用默认值顶替. 例1, 复制代码 代码如下: ...

最新文章

  1. TensorRT Samples: MNIST API
  2. 用shell脚本计算日期的小函数们
  3. Host is not allowed to connect to this MySQL server解决方法
  4. cordova 实现网页缓存_如何解决ionic,cordova混合开发的app缓存大的问题
  5. Javascript 模块化指北
  6. MaxCompute使用常见问题总结
  7. 调整窗口大小时进行页面刷新(设定定时器)
  8. 吊打6599元的三星?买手机莫慌 三款国产新手机将发
  9. Weka算法Classifier-tree-J48源代码分析(一个)基本数据结构和算法
  10. MyBatis解析<if>动态sql时,Integer类型值为0,返回false
  11. robotframework 图片校验
  12. 虚拟机Linux忘记root密码的解决办法
  13. 中文语音合成综合评测一(可懂度)
  14. 购买了虚拟主机还要云服务器,购买了虚拟主机还要云服务器
  15. 数据中心服务器机柜电气参数,数据中心服务器机柜一些安装与参数
  16. ife2018 零基础学院 day 3
  17. ubuntu安装与卸载搜狗输入法
  18. 大姨妈的由来【摘字古书】
  19. 智慧医疗读书笔记(1-2)
  20. SharePoint BI

热门文章

  1. Java NIO之缓冲区Buffer
  2. 建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期...
  3. 程序员算法之找出链表的第K个结点
  4. Bitbucket 触发内网 Jenkins Build
  5. Python函数名挂载变量
  6. morhpia(4)-更新
  7. JavaScript-Tool:CKFinder
  8. fast neural style transfer图像风格迁移基于tensorflow实现
  9. spring boot 视图层(JAVA之学习-2)
  10. weblogic 10.x 上开发restful服务