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
并且不得包含相反含义的声明。