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

admin3年前PHP教程48

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

问题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代码

学习了~

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

相关文章

租用法国服务器中国访问速度怎么样

租用法国服务器中国访问速度怎么样?租用法国服务器在中国访问速度可能会受到一些限制和影响,因为法国位于欧洲,距离中国较远,需要经过多个网络节点才能连接到中国。这样的情况可能导致访问速度变慢和延迟增加。租...

php的Snoopy类案例讲解

php的Snoopy类获取请求网页里面的所有链接,直接使用fetchlinks就可以,获取所有文本信息使用fetchtext(其内部还是使用正则表达式在进行处理),还有其它较多的功能,如模拟提交表单等...

详解Laravel服务容器的优势

目录概述使用服务容器的优势例一、发送邮件例二、实现单例模式例三、旅行者去旅行总结概述laravel服务容器就像一个高度自动化的工厂,你需要的东西,定制好模型,使用特定接口来制造。因为使用了服务容器,l...

PHP实现WebSocket实例详解

WebSocket 是什么?摘抄网上的一些解释:WebSocket 协议是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服...

详解PHP服务器如何在有限的资源里最大提升并发能力

概述假设报考app是用5W rmb 向供应商采购,报名当天涌入海量考生,并发数飙升至30W+,导致系统宕机,拒绝服务,致使考生无法报名,那么5W rmb 能否支持30W+并发呢?不过对于我们来说,不妨...

GPU显卡服务器从哪几方面选呢泉州显卡服务器购买需要注意哪些事项

显卡服务器又称GPU服务器(GPUCloudComputing,简称GPU)是基于GPU应用的计算服务,具有实时高速的并行计算和浮点计算能力,一般适用于3D图形应用程序、视频解码、深度学习、科学计算等...