0

我有一个文件“xxx.php”,其中包含 HTML 和 PHP 代码。当我使用include("xxx.php");它时它很好并且它按预期工作。但我正在开发一个无法使用 include 但可以使用file_get_contents().

问题是,如果我执行 echo file_get_contents("xxx.php") 它会显示整个源代码而不解释 PHP。

所以我做了很多研究,我发现我可以用它eval()来运行 PHP 代码。问题是“xxx.php”有 php 和 HTML 代码。我试过了:

eval(file_get_contents("xxx.php"));

但是没有显示 HTML。xxx.php 示例:

<?php
echo "HELLO";
?>
<b>HELLO BOLD</b>
<?php
echo "BYE";
?>

问题是 eval 没有显示任何 HELLO!

4

3 回答 3

2

echo file_get_contents()显示代码是可以预期的。f_g_c() 不会执行它检索到的任何内容。它只是从磁盘中获取字节并将它们作为字符串返回。这就是为什么你需要eval().

同样,当你eval()编码时,你不应该包含分隔<?php符。例如

php > eval('2+2;'); // no return, no echo, so no output
php > eval('echo 2+2;');
4
php > eval('<?php echo 2+2;');
PHP Parse error:  syntax error, unexpected '<' in php shell code(1) : eval()'d code on line 1
php >

评论跟进:

只需将您提供给 eval 的任何内容都视为普通的 PHP 脚本,而该脚本恰好<?php神奇地应用了一个开始标签:

php > eval('?> foo <?php echo 2+2;');
 foo 4

如果您在 eval 块中首先退出 PHP 模式,那么 eval 只会将该文本视为正常输出,就像一个成熟的 PHP 脚本一样

于 2013-07-24T19:55:46.353 回答
2

在评估"?>\n"之前添加到 PHP 代码(进入 HTML 模式):

eval("?>\n" . file_get_contents("xxx.php"));

并修复您的 CMS 中的安全问题,这样您就不必采取如此激烈的措施来躲避脚本小子的攻击。

于 2013-07-24T20:05:33.003 回答
0

出于对<insert diety here>不要这样做的热爱....但是您的代码失败了,因为您需要<?php从 eval 的顶部删除。

Eval 需要 php 代码,所以<?php?>假设的一样。

你在这里所做的不是保护你的网站,而是让它更容易被黑客入侵。

于 2013-07-24T19:55:24.520 回答