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


Posted in PHP onJuly 07, 2021

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

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

先看三个命令:

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

A结果:

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

B结果:

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

报错

思考:

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

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

结果:

eval(cmd)与eval($cmd)的区别与联系
发现是可以执行的。

后话:

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

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

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

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

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

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

看代码:

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

看看结果:

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

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

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

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

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

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

那我们的playload应该是:

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

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

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

学习了~

PHP 相关文章推荐
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 PHP
用php如何解决大文件分片上传问题
Jul 07 #PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 #PHP
PHP实现两种排课方式
Linux系统下安装PHP7.3版本
详细分析PHP7与PHP5区别
Jun 26 #PHP
laravel添加角色和模糊搜索功能的实现代码
一文搞懂php的垃圾回收机制
You might like
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
2014/11/18 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
Python中apply函数的用法实例教程
2014/07/31 Python
Python入门篇之面向对象
2014/10/20 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
在职人员函授期间自我评价分享
2013/11/08 职场文书
理工科学生的自我评价
2013/12/15 职场文书
大二学期个人自我评价
2014/01/13 职场文书
国家助学金获奖感言
2014/01/31 职场文书
运动会800米加油稿
2014/02/22 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript