• PHP文件浏览程序[安全性问题] - [技术交流]

    Tag:php 安全
    般服务器为了安全都没有打开文件浏览的功能.
    但可能有时候需要了解服务器上的目录/文件, 这个程序可以查看程序所在目录及子目录下的文件.
    相看哪个目录下的文件, 直接把这个PHP程序文件放在这个目录下, 然后通过浏览器打开就可以浏览了.
    <?php

    if(isset($_SERVER['PATH_INFO']))
    $path = $_SERVER['PATH_INFO'];
    else
    header('Location: ' . $_SERVER['SCRIPT_NAME'] . '/');

    define('COL_SIZE_NAME', 35);
    define('ROW_DISPLAY_FORMAT', ' % 15s % 20s % 20s');
    $path = dirname(__FILE__) . $path;
    $hidden = isset($_GET['hidden']);
    $queryString = ($_SERVER['QUERY_STRING']) ? ('?' . $_SERVER['QUERY_STRING']) : '';

    if(! file_exists($path))
    {
    echo '<h2>Not exists: ' . $path . '</h2>';
    }
    elseif(! is_readable($path))
    {
    echo '<h2>Can not read: ' . $path . '</h2>';
    }
    elseif(is_dir($path))
    {
    if($dir = opendir($path = realpath($path)))
    {
    echo '<h3>' . $path . '</h3>';
    echo '<pre>';
    echo ' ' . 'FILE NAME' . str_repeat(' ', COL_SIZE_NAME - strlen('FILE NAME'));
    echo sprintf(ROW_DISPLAY_FORMAT, 'SIZE', 'CREATE TIME', 'MODIFY TIME');
    echo "\n";
    while(false !== ($file = readdir($dir)))
    {
    if(! $hidden && substr($file, 0, 1) == '.')
    continue;

    if(is_dir($filepath = $path . '/' . $file))
    {
    echo '# <a href="' . $file . '/' . $queryString . '">' . $file . '</a>';
    }
    else
    {
    echo '&gt; <a href="' . $file . '">' . $file . '</a>';
    }
    if(($last = COL_SIZE_NAME - strlen($file)) > 0)
    echo str_repeat(' ', $last);
    echo sprintf(ROW_DISPLAY_FORMAT,
    (string)filesize($filepath),
    strftime('%Y-%m-%d %H:%M:%S', filectime($filepath)),
    strftime('%Y-%m-%d %H:%M:%S', filemtime($filepath)));
    echo "\n";
    }
    closedir($dir);
    echo '</pre>';
    }
    else
    {
    echo '<h2>Directoy open fail: ' . $path . '</h2>';
    }
    }
    elseif(is_file($path))
    {
    readfile($path);
    }
    else
    {
    echo '<h2>Unknow file type: ' . $path . '</h2>';
    }

    注意:
    这程序需要服务器支持PATH_INFO, 在Apache上一般没有什么问题.
    还有是, 如果没有用, 最好把文件放在重要的服务器上, 不然有可能会引起安全隐患.
    如果一定要用, 可能给程序文件启一个特别的文件名, 以防止被无关的人知道.


    历史上的今天:

    仓木麻衣 2008-03-07

    随机文章:

    080313日记 2008-03-13
    仓木麻衣 2008-03-07

    收藏到:Del.icio.us




    评论

  • 嘿嘿,很有用的哦~~~值得学习的~