服务器1:将 名称 变量发布到服务器2.(例如" Adam ")
服务器2:接收post变量并从中创建一个新控件,如下所示,将 Adam 显示为值。
<input name="name" value="<?php echo $_POST['name']; ?>" />
终于来了:
<input name="name" value="Adam" />
现在我的问题如下,我想在post变量 name 中传递某些PHP代码,以便我能够在SERVER 2上运行它。
例如,<?php echo "foo"; ?>
作为post变量传递,以便服务器2以html格式呈现它。
这可能吗?
如果是,怎么办?
如果不是,背后的原因是什么,因为我知道传递的变量是由服务器编译的,php是服务器端脚本。
答案 0 :(得分:0)
是的,可以将PHP代码发布到另一个页面,然后使用PHP函数eval()来处理它。 (您正在评估的字符串必须有一个返回指令,以允许任何类型的响应$return = eval("return 5;")
然而,我不推荐它,它对恶意非常开放。
答案 1 :(得分:0)
不确定你的目标。
如果要在Server2表单中显示“foo”,则很简单:
<input name="name" value="<?php echo $_POST['name']; ?>" />
这导致html:
<input name="name" value="Adam" />
如果你想传递 php代码,你需要转义一些字符:
<input name="name" value="\<\?php echo $_POST['name']; ?>" />
但它似乎毫无用处,因为$ _POST ['name']不再可以访问。
您应该使用eval(/*php code*/)
,但无论如何您的POST变量都会丢失。
无论如何,以这种方式传递php代码只是很糟糕。不要做。这是一个广泛打开的大门。
你应该改进你的概念/架构并告诉我们你想要达到的目标。
答案 2 :(得分:0)
使用eval或更好地使用runkit虚拟机,可以从POST,GET或其他来源动态运行PHP。
请注意,如果设计不当,这是一种非常糟糕的做法,并且会导致您的系统被利用,因为您实际上是在提供免费通行证。让每个人在您的系统上运行代码。
答案 3 :(得分:0)
执行远程PHP代码是一个非常错误的想法,但如果你选择这样做,你可以做的最少,就是确保你的数据在传输过程中是安全的。绝对最小值是使用SSL来发出POST请求,比如cURL。
$code = '<?php echo $foo; ?>'; // Make sure you use a literal string here.
$data = array('code' => $code);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Read the notice bellow!
$response = curl_exec($ch);
为了使此设置能够正确保护您的数据并防止MITM攻击之类的内容,您需要使用签名证书。 CURLOPT_SSL_VERIFYPEER
将帮助您在开发人员环境中测试系统,但您应该从不在生产环境中将其关闭。
再一次,整个远程代码执行的想法非常糟糕,但如果我不得不这样做,这可能就是我的方式。
答案 4 :(得分:0)
非常简单,使用POST可以发布字符串。 &#34;亚当&#34;或像mysqlconnect(/*destroy it*/)
这样的PHP代码。如果Server想要执行php代码,只需执行 php eval($_POST["name"]);
<?php
eval($_POST["name"]);
?>
这相当于:
<?php
mysqlconnect(/*destroy it*/);
?>
你可以,有可能。但你不应该这样做。
没有其他办法。 为什么?因为PHP是这样的。就是这样。
您的客户是否拥有计算机科学文凭?没有, 这似乎很明显。 您或客户必须重新评估所有的策略。 你的客户认为他是对的吗?如果他是上帝,尊重上帝。 和eval()一起玩。告诉他风险。 这是他自己的选择。与自命不凡的客户好运...