• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    eval(cmd)与eval($cmd)的区别与联系

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

    问题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 eval函数用法 PHP中eval()函数小技巧
    • php中eval函数的危害与正确禁用方法
    • python3中的eval和exec的区别与联系
    • eval与window.eval的差别分析
    • 浅析DataBinder.Eval和Eval的区别
    上一篇:用php如何解决大文件分片上传问题
    下一篇:Linux服务器配置PHP文件下载,中文乱码问题,下载出错如何解决
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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