-
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 '> <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上一般没有什么问题.
还有是, 如果没有用, 最好把文件放在重要的服务器上, 不然有可能会引起安全隐患.
如果一定要用, 可能给程序文件启一个特别的文件名, 以防止被无关的人知道.
收藏到:Del.icio.us








评论