【问题标题】:Does php recursively execute itself?php会递归执行自己吗?
【发布时间】:2012-12-29 12:17:03
【问题描述】:

我有一个简单的问题。如果我写了一个 php 文件,它会回显另一个正确的 php 语句,这会被执行吗?例如:

<html>
<body>
<?php echo "hello: "."<?php echo '1';?>"; ?>
</body>
</html>

这会产生输出:Hello: 1 吗?

我会说不,但如果我在 Apache 下运行它,“内部回声”会被“清理”为 &lt;!--?php echo '1';?--&gt;,这让我相信它可以。

谢谢!

【问题讨论】:

  • 不,它没有,这只是另一个安全级别。
  • 你的内部 "" 包含在另一个 PHP 块中,将被视为字符串,所以不,它不应该给你Hello: 1,除非你会eval() 内部语句。我假设 Apache 清理了&lt;? 以避免与同样以&lt;? 开头的内联XML 内容混淆
  • 您的 Web 服务器必须干扰您的 PHP 文件。字符串"&lt;?php echo '1';?&gt;" 就是这样,一个字符串 - 应该逐字打印到屏幕上(因为它包含尖括号,您需要查看源代码才能在浏览器中看到它)。
  • 你的服务器一定是真的搞砸了... PHP 不执行自己看3v4l.org/kd7qf
  • 谢谢大家。我认为@SaschaM78 的假设是有道理的;我不明白为什么 Apache 会清理这样的东西!

标签: php apache security


【解决方案1】:

感谢上帝,它没有。为了执行一个字符串,你应该(not)使用eval()

<html>
<body>
<?php echo "hello: ".eval("echo '1';"); ?>
</body>
</html>

【讨论】:

  • 你的代码不正确,一定是eval("echo '1';");是的,eval 是邪恶的
  • 是的,@m4t1t0 是对的。杰弗里,请纠正,所以我可以接受答案。顺便说一句,我不打算做任何疯狂的事情 :) 只是想知道为什么 Apache 会这样做。我来调查如何在 UA/Referer 之类的东西中进行“PHP 注入”,除非 PHP 会出于某种奇怪的原因重新执行自身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多