php的eval调用变量就出错。

发布于 2022-09-01 18:42:42 字数 608 浏览 9 评论 0

现在已经确定服务端PHP代码(不能修改)是

<?php
    eval($_GET['command']);
?>

但是在一调用就出错。
因为项目需求。在传值时,必须使用base64_decode("base64处理后的字符串");
所以我测试时,使用的url如下:
http://test.cn/2.php?command=base64_decode("ZWNobyAndGVzdCc7");
但是返回的页面无任何内容。
如果不用base64_decode函数一点事也没有,如下:
http://test.cn/2.php?command=echo "123";
能显示123.

ZWNobyAndGVzdCc7 编码前的字符串为 echo 'test';

服务端代码不能进行改动,请求时必须以base64_decode("base64处理后的字符串")这样的方式来。困扰一天了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

抽个烟儿 2022-09-08 18:42:42

警告,使用eval是非常危险的行为!
特别是你们对于这个command参数甚至没有任何加密和过滤处理,那么用户哪天传一个参数能查看,显示,编辑其内容,甚至修改,删除服务器所有文件的代码也是可以直接运行的(当你的PHP在以root运行)

抛开这个不谈来分析这个问题
服务器进行eval时,它实际上是等价于运行:

base64_decode("ZWNobyAndGVzdCc7");

这时候会得到一个字符串

echo 'test';

然而,因为你的eval只有一个,所以后面这个base64解码出来的文本,实际上只是一段文本,表达式到这个时候就已经结束了,不会再继续运行,所以要达成楼主的目的,应该是需要这样:
http://test.cn/2.php?command=echo base64_decode("dGVzdAo=");
或者这样:
http://test.cn/2.php?command=eval(base64_decode("ZWNobyAndGVzdCc7"));

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文