有关PHP的可变函数
事情的起因是这样子的,最近看到一道题,问的是
<?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()');
?>
有关PHP的可变函数的更多相关文章
- php中的可变函数和匿名函数
可变函数 一个函数的名,是一个变量的时候,就称为可变函数 <?php header("content-type:text/html;charset=utf8"); funct ...
- PHP的学习--可变函数
PHP 支持可变函数的概念.这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它.可变函数可以用来实现包括回调函数,函数表在内的一些用途. 可变函数不能用于例如 ech ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- php学习笔记5--php中的可变变量,可变函数及匿名函数
可变变量指的是:将一个变量的值再次当做一个变量名从而得到另外一个变量的值.如:$name = 'dqrcsc';$myname = 'name'; //$myname的值碰巧是另一个变量的变量名ech ...
- php 可变函数
//可变函数 function Test(){ $arr = func_get_args(); //获取所有参数 ,返回数组 $sum=0; for($i ...
- PHP可变函数
可变函数是指如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行它 可变函数可以用来实现包括回调函数,函数表在内的用途 $str = 'strtolower'; echo $str( ...
- PHP:第三章——PHP中的可变函数
PHP中的可变函数 <?php header("Content-Type:text/html;charset=utf-8"); function F(){ echo '999 ...
- 再学Java 之 形参个数可变函数
自Java 5后,Java允许定义形参个数可变的方法,从而允许运行过程中,为方法指定不确定个数的形参. 其定义方法的格式如下: void function_name ( type ... variab ...
- php中的可变变量、可变函数、匿名函数
1.可变变量 简而言之:获取一个普通变量的值作为这个可变变量的变量名. 如: $a = "hello"; $$a = " world"; /* $a 的值为&q ...
- 18)PHP,可变函数,匿名函数 变量的作用域
(1)可变函数: 可变函数,就是函数名“可变”——其实跟可变变量一样的道理. $str1 = “f1”; //只是一个字符串,内容为”f1” $v1 = $str1(3, 4); //形式上看 ...
随机推荐
- Python—守护进程管理工具(Supervisor)
一.前言简介 1.Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程.可以很方便的用来启动.重启.关闭进程(不仅仅是 ...
- 《C程序设计(第四版)》小记
我看的这本书很经典,它是谭浩强写的,也就是广为流传的“C语言红皮书”.在网上看了很多帖子,生活中也问过一些朋友,大多数人是不认可这本书的.很多人都说这本书很烂,看不懂,然后去“追逐”国外的一些教材.其 ...
- 启动outlook时报错:mapi无法加载信息服务msncon.dll
今天这个Office2010 outlook搞的让人蛋疼,老是说启动outlook时报错:mapi无法加载信息服务msncon.dll. 百度了一下,如下解决方案: 安装路径为D:\NEW Windo ...
- JS实现遮罩层
/* * 显示loading遮罩层 */ function loading() { var mask_bg = document.createElement("div"); mas ...
- php对比二个不同的二维数组
$diff_data = array_filter($data1, function($v) use ($data2) { return ! in_array($v, $data2);});
- Point Estimation
Point Estimation \(\bullet\)What is point estimation? Example: \(\bullet\) Bevan, Kullberg, and Rice ...
- OpenCV 特征点检测
#include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #inclu ...
- 微软科学家Leslie Lamport荣获2013年图灵奖
Lamport荣获2013年图灵奖" title="微软科学家Leslie Lamport荣获2013年图灵奖"> 编者按:Leslie Lamport,新晋图灵奖 ...
- python掉包侠与深浅拷贝
今日所得 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝 包 在学习模块的时候我们了解过模块的四种表现形式,其中的一种就是包. 什么是包? 它是一系列模块文件的结合体,表示 ...
- 如何用Nginx解决跨域问题
一. 产生跨域的原因 1.浏览器限制 2.跨域 3.XHR(XMLHttpRequest)请求 二. 解决思路 解决跨域有多重,在这里主要讲用nginx解决跨域 1.JSONP 2.nginx代理 3 ...