从$ _POST运行某些PHP代码?

时间:2015-07-17 08:39:01

标签: php html forms post

服务器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是服务器端脚本。

5 个答案:

答案 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()一起玩。告诉他风险。 这是他自己的选择。与自命不凡的客户好运...