0

假设我们有一个template.php包含一堆 html 和一些 php 代码的文件,例如:

...
<body>
    <div class="content">
        <?php echo $content; ?>
    </div>
</body>
...

我想将文件的内容作为文本(包括 php 代码)读取并在文本区域中输出,以便用户能够编辑模板。我正在尝试使用 来完成此操作file_get_contents并使用 渲染它htmlspecialchars,但它似乎在从文件中读取 php 代码时执行它。在这种情况下如何避免解释和执行php代码?谷歌搜索没有帮助,也许我还不够努力。有小费吗?谢谢!

编辑:好的,我解决了这个问题。问题是我将文件的 URL 路径传递给file_get_contents而不是其文件系统路径,显然这导致所有 php 代码被剥离和忽略(?)。感谢您的提示

4

1 回答 1

1

file_get_contents不会执行 PHP 代码,除非您尝试在远程服务器上编辑文件并提供 URL。在这种情况下,您从远程服务器获得的将是执行的 PHP 代码,而不是源代码。

要么编辑一个本地文件,要么你需要提供一个“后门”,它将把给定 PHP 文件的代码发回给你。小心,因为这是一个安全漏洞——任何人都可能阅读你的 PHP 源代码。

避免这种情况的一种方法是仅在文件位于给定目录中时才接受提供文件。另一个可能是检查文件内容:

<?php

    // This file will read any local PHP file (or any file of any kind,
    // returning it as text), provided they contain a written agreement
    // to be read.
    if (!isset($_REQUEST['file']))
        die("ERROR: no file supplied");
    $path = $_REQUEST['file'];
    if (!is_readable($path))
        die("ERROR: file is not readable");
    $content = file_get_contents($path);
    if (false === strpos($content, "IT IS OK TO READ THIS FILE AS SOURCE"))
        die("ERROR: this file is not authorized");
    if (false !== strpos($content, "IT IS NOT OK TO READ THIS FILE AS SOURCE"))
        die("ERROR: this file is not authorized");
    Header("Content-Type: text/plain");
    Header("Content-Length: " . strlen($content));
    die($content);
?>

为了能够读取文件,文件本身必须包含声明,例如

// IT IS OK TO READ THIS FILE AS SOURCE

并且不得包含相反含义的声明。

于 2012-09-06T16:32:49.020 回答