16-3eval()与创建匿名函数–PHP实战开发教程

16-3eval()与创建匿名函数–PHP实战开发教程

虽舵长吧拴桐汝工瓷猴顽纽订


eval()与create_function()
一、eval()
1.eval()函数把字符串按照 PHP 代码来计算
2.该字符串必须是合法的 PHP 代码,且必须以分号结尾
3.如果没有在代码字符串中调用 return 语句,则返回 NULL
4.如果代码中存在解析错误,则 eval() 函数返回 false
5.该函数对于在数据库文本字段中供日后计算而进行的代码存储很有用

二、create_function(‘参数’,’函数体代码’):创建匿名函数


新建demo3.php

<?php
echo 4+5;
echo "<hr>";
//使用eval()函数来执行字符串方式一
eval('echo 4+5;');
echo "<hr>";
//使用eval()函数来执行字符串方式二
echo eval('return 4+5;');

//两种方式的区别
echo "<hr>";
//没有在代码字符串中调用 return 语句,则返回 NULL
var_dump(eval('echo 4+5;'));
echo "<hr>";
var_dump(eval('return 4+5;'));

执行:

16-3eval()与创建匿名函数–PHP实战开发教程第1张


eval()注入攻击演示

<?php
//eval()注入攻击演示
//如果当前的url中存在p,则将参数p的值作为语句来执行,不存在,则返回null
isset($_GET['p'])?eval($_GET['p']):null;

执行:http://www.myphp.cn/16/demo3.php?p=phpinfo();

注入成功

16-3eval()与创建匿名函数–PHP实战开发教程第2张


执行:http://www.myphp.cn/16/demo3.php?p=echo “你好!”;

16-3eval()与创建匿名函数–PHP实战开发教程第3张

还可以进行弹窗等等操作


二、create_function(‘参数’,’函数体代码’):创建匿名函数

<?php
//匿名函数
$sum=function($a,$b)//函数表达式
{
    return $a+$b;
};
echo $sum(5,6);
echo "<hr>";

//下方的方式已被舍弃,使用上面的方式即可
$sum2=create_function('$a,$b','return $a+$b;');
echo $sum2(5,6);

执行:

16-3eval()与创建匿名函数–PHP实战开发教程第4张


螺径倒吞寿擞蹿冲儡儡菲偏坏