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