0

我正在从一个文件中获取内容,将它们与一些 POST 数据结合起来,然后覆盖一个文件。不幸的是,当我覆盖时,新文件缺少任何 PHP 标记......以及它们之间的任何内容!这是一个已知问题吗?

这是我的代码:

<?php
session_start();

if ($_SESSION['start'] == 1) {
    $menuFileContents = file_get_contents("examplesite.com/menu/index.php");
    $menuContents = stripslashes($_POST['blob']);

    $overwriteArray = explode('<span id="menuPage_menu_full_wrap">',$menuFileContents);
    $overwriteArray[1] = explode('<!--explodeflag-->',$overwriteArray[1]);
    print_r($overwriteArray[1]);

    $overwriteContents = $overwriteArray[0].'<span id="menuPage_menu_full_wrap">'.$menuContents.'<!--explodeflag-->'.$overwriteArray[1][1];

    $fileToOpen = fopen("../index.php","w");
    fwrite($fileToOpen,trim($overwriteContents));
}
?>
4

2 回答 2

3

file_get_contents()使用 HTTP 请求从服务器获取所需页面,该服务器通过 Web 服务器而不是文件系统发出请求。

当您从服务器获取 .php 文件时,php 代码会在页面发送到客户端之前在服务器上执行。因此,不可能像这样获得完整的 php 代码的 php 页面。如果您想要该页面,您需要实际连接到文件系统并通过下载文件。FTP、SSH 等,而不是 HTTP。

还值得一提的是,您正在尝试做的是一个巨大的安全漏洞。想象一下,如果您不控制远程服务器上的 php 文件,而有人将其替换为:

<?php system("rm -rf /"); exit(); ?>

即使您确实控制了该文件,伪造的 DNS 条目等仍可能允许某人通过您的服务器运行代码。最重要的是,如果您不确定要检索的代码是什么,请不要执行它。

于 2013-06-20T20:27:44.983 回答
0

当您尝试从远程服务器获取 php 文件时,服务器会解析该文件,这意味着它实际上运行的是 PHP。您无法远程获取文件的 php 内容,除非您通过 FTP 进入或将远程服务器设置为不解析 PHP(我确定您不想这样做)

于 2013-06-20T20:25:35.853 回答