[PHP] Script détecteur d’Index of et création automatique

05
juin
2012
  • Google Plus
  • LinkedIn
  • Viadeo
Posted by: Yann C.  /   Category: Programmation & Développement / Projets & outils   /   Pas de commentaire

Une étape relativement longue et redondante lors de la conception et développement d’une application web consiste à parcourir tous les répertoires de l’application pour vérifier s’il y avait bien un fichier « index » dedans (afin d’éviter les IndexOf, de voir les bannières du serveur etc…).

Il m’a donc été nécessaire de créer ce petit script tout bête, qui parcoure récursivement un répertoire donné, analyse tous les sous-répertoires en indiquant lesquels sont dotés d’un fichier « index », et si le répertoire n’en possède pas, le script permet d’en créer un de votre choix et automatiquement dans le répertoire concerné.

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<style>
*{
font-family:verdana;
font-size:10px;
}
 
.error{
font-weight:bold;
color:#AA0000;
}
 
.success{
font-weight:bold;
color:#00AA00;
}
</style>
</head>
<body>
<form action='' method='post'>
<table>
<tr>
<td>Absolute path to analyze :</td>
<td><input type='text' name='path' size='100' value='<?php echo $_SERVER['DOCUMENT_ROOT'];?>' /></td>
</tr>
</table>
<input type='submit' value='Run' />
</form>
 
<?php
 
function printDirectory($folder, $indexExists){
echo "<li class='" . ((!$indexExists) ? 'error' : 'success') . "'>
<input type='checkbox' value='$folder' name='folders[]' " . ((!$indexExists) ? 'checked' : '') . "/>
$folder
</li>";
}
 
function fileWalker($luke){
$dp = @opendir($luke) or die("Directory $luke doesn't exist...");
$indexExists = false;
$folders = array();
 
while($file = @readdir($dp)){
if(in_array($file, array('.', '..', '.svn'))) continue;
if(is_dir($luke.'/'.$file))
$folders[] = $luke.'/'.$file;
else {
if(preg_match('/^index\.(php|html|htm)$/i', $file))
$indexExists = true;
}
}
 
printDirectory($luke, $indexExists);
@closedir($dp);
 
foreach($folders as $folder){
echo '<ul>';
fileWalker($folder);
echo '</ul>';
}
 
}
 
if(isset($_POST['path'])){
echo "<form action='' method='post'>
<table>
<tr>
<td>Content of index.html :</td>
<td>
<textarea cols='100' rows='10' name='content'>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
</head>
<body>
<script type='text/javascript'>
setTimeout(\"window.location='/'\",1);
</script>
</body>
</html>
</textarea>
</td>
</tr>
</table>
 
<input type='submit' value='Create Indexes' />
<ul>";
fileWalker(trim(strval($_POST['path'])));
echo " </ul>
<input type='submit' value='Create Indexes' />
</form>";
} elseif(isset($_POST['content'], $_POST['folders']) && is_array($_POST['folders']) && count($_POST['folders']) > 0){
$content = trim(strval($_POST['content']));
foreach($_POST['folders'] as $folder){
$folder = trim(strval($folder));
if(is_dir($folder) && is_writable($folder) && !file_exists($folder.'/index.html')){
$fp = @fopen($folder.'/index.html', 'w');
if($fp){
@fputs($fp, $content);
echo "<div class='success'>$folder</div>";
@fclose($fp);
} else
echo "<div class='error'>$folder</div>";
}
}
}
 
?>
 
</body>
</html>
  • Google Plus
  • LinkedIn
  • Viadeo
Yann C.

About the Author : Yann C.

Consultant en sécurité informatique et s’exerçant dans ce domaine depuis le début des années 2000 en autodidacte par passion, plaisir et perspectives, il maintient le portail ASafety pour présenter des articles, des projets personnels, des recherches et développements, ainsi que des « advisory » de vulnérabilités décelées notamment au cours de pentest.