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

admin3年前PHP教程33

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

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

学习了~

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

相关文章

泉州高防服务器租用需要注意什么

泉州高防服务器租用需要注意以下几点:1.选择正规的服务提供商:选择正规的服务提供商是非常重要的,这可以确保您的服务器能够得到良好的维护和保障,同时可以避免不必要的问题和风险。2.确认高防性能:选择高防...

在PHP中操作文件的扩展属性

在操作系统的文件中,还存在着一种我们可以自己定义的文件属性。这些属性不是保存在文件内容中,也不是直接可以通过 ls -al 所能看到的内容。它们可以将一个键值对信息永久得关联到文件上,一般现在的 Li...

php去掉一维数组的键值的实例方法

 在 PHP 中,数组的每个元素都是由键值对(key-value)组成,通过元素的键名来访问对应键的值。提示:“索引”和“键名”指的是同一样东...

PHP导出数据超时的优化建议

一般情况下,导出超时可能都是以下三种情况:  一、sql语句复杂,查询时间过长;  二、处理查询后数据逻辑冗余;  三、数据量过大导致响应超时。接下来分别给出这三种情况的优化建议。一、sql语句复杂,...

PHP的重载使用魔术方法代码实例详解

摘录PHP官网对PHP重载的解释:PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过魔术方法(magic methods...

在选择高防服务器提供商时需要注意哪些?100G国内高防服务器租用地址是多少?

越来越多人认为每个高防服务器都是相同的,可以提供出色的服务,但情况并非总是如此。这就是决定谁选择能够满足期看的高防服务器提供商的的原因。在选择服务器之前,请确保高防服务器提供商符合行业标准。那么在选择...