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

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

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

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

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

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

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

最新文章

  1. 项目积累(三)CSS
  2. 你需要知道的包管理器(Package Manager)
  3. http 301 和 302 的区别!
  4. Linux 下curl模拟Http 的get or post请求
  5. 拼sql条件时判断 是不是当前时间是不是周五,如果今天不是周五,就选上周五
  6. Failed to upgrade AX 2012 R3 Retail channel database from CU9 to CU11 if SQL Server version was lower than 2012
  7. POJ 1511 最短路spfa
  8. STL Container和ATL智能包裹类的冲突
  9. 上下问语句句柄Release地方
  10. cocos2d-x中的Box2D物理引擎
  11. leetcode Same Tree python
  12. 打包mysql、tomcat、jdk为一个软件
  13. Android菜鸟的成长笔记(15)—— Android中的状态保存探究(下)
  14. Cocos2d-x 3.0final 终结者系列教程01-无论是从cocos2d-x2.x升级到版本cocos2d-x3.x
  15. ShellExecute函数简单说明
  16. CI_SMOKE配置手册
  17. WebFTP安装说明
  18. 笔记3 装配Bean总结
  19. ISP PIPLINE (十三) CSM/CSC(color space matrix/convert)
  20. VMWare 鼠标无法点击 的问题

热门文章

  1. Python基础学习三
  2. Android圆角布局、天气应用、树状图、日食动画、仿饿了么导航效果等源码
  3. G. Petya and Graph(经典项目与项目消耗问题)(网络流)
  4. Java快速输入输出
  5. EXAM-2018-8-10
  6. redis的集群:
  7. F5 BIG-IP之二 LTM实验一
  8. 利用git上传文件到github
  9. python面向对象类的约束和设计的统一化规范
  10. CentOS 5.5 --学习(1)