eval(cmd)与eval($cmd)的区别与联系

admin3年前PHP教程59

这个问题一直困扰我许久,今天终于解决清楚了

问题1:eval的执行是否需要双引号包括:

先看三个命令:


a:<?php eval(system(dir))?>
b:<?php
    $cmd="system(dir)";
    eval($cmd)?>


a结果:

b结果:

报错

思考:

同样是一个命令,为什么会出现如此区别,询问了其他师傅得知:eval执行的是变量的值的时候,该变量值需要闭合,也就是必须是一个完整的语句,需要用分号结尾。根据这个道原理我们改一下上面的命令看看:


<?php
    $cmd="system(dir);";
    eval($cmd)?>


结果:


发现是可以执行的。

后话:

关于这个点,还需要补充一个:

内置函数在eval里面直接执行时不需要加分号,看两个命令就知道了:


eval(system(dir));
eval(system(dir););


内置函数不需要加分号,其实我觉得加不加分号都一样,因为加了分号就要加引号,引号也带有解析的意思

理解一下命令执行中的闭合:

看代码:


eval(system(dir));
eval(system(dir););


看看结果:

这里可以并且后面语句是不影响解析的


<?php
    eval("system(dir);?>xyusaiqeqcyuqqwdnoqcq");
    ?>


我们这里都是不影响的,为什么?

如果我们是简单的闭合eval这个命令

那我们的playload应该是:


<?php
    eval("system(dir));?>xyusaiqeqcyuqqwdnoqcq");
?>
上面的代码我错误的理解成:
<?php
    eval("system(dir)");?>
    xyusaiqeqcyuqqwdnoqcq");
?>


之前我错误的以为是这样的闭合的,但是后来发现我错了,直到在有一道题目中我发现这样闭合不了,后面询问了一下其他师傅,得到答案:

eval()这个函数可以理解成我们是将eval(字符串)这里面的字符串放到了一个新的php里面去运行,这个新的php本来就又 <?php 所以当我们传入 system(dir);?>dasdas的时候,?>就以及阶段了php代码

学习了~

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

GPU服务器的主要应用领域租用美国gpu服务器哪个好

GPU服务器又称显卡服务器,是基于GPU的应用于视频编解码、AI深度学习、科学计算等多种场景的快速、稳定、弹性的计算服务。GPU加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载转...

如何用PHP实现多线程编程

目录多线程线程适用场景PHP中的多线程线程安全PHP 实现类和方法实例代码异步请求超时控制总结多线程线程首先说下线程:线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是...

laravel 实现阿里云oss文件上传功能的示例

1、定义路由?1234// 阿里云文件储存Route::group(['prefix'=>'aliyun'], function(){  &n...

php安装grpc扩展的具体步骤

1、在php.ini文件中添加grpc扩展配置:extension=grpc.sogit clone -b $(curl -L http://grpc.io/release) github/grpc/...

PHP常见算法合集代码实例

许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣,下面是一些常用的算法和实例,大家可以好好学习下一、文件夹遍历<?phpfunction allFile($path =...

GPU服务器可用于深度学习吗韩国gpu服务器哪个品牌好

GPU服务器可用于深度学习吗?什么是深度学习?在人工智能领域,机器学习是其中的一个技术流派,通过从已知样本中提炼规律来获得判断未知样本的智能;深度学习则是机器学习的一种,它所学习出来的模型是深度神经网...