Gå til innhold

Sikre innput ved mappe-browsing


Anbefalte innlegg

Holder på å lage et filarkiv som skal gjøre det mulig å browse gjennom mapper og vise filer. I et slikt script er det jo enormt viktig at man ikke tillater browsing høyere opp i filstrukturen enn man ønsker.

 

Vil dette være tilstrekkelig "sperre" mot det?

function realsafehtml($str) {
   // Don't do anything if there's no difference or if the original string is empty
   $oldstr = "";

   while($str != $oldstr) {
       $oldstr = $str;
       //nuke script and header tags and anything inbetween
       $str = preg_replace("'<script[^>]*>.*</script>'siU", "", $str);
       $str = preg_replace("'<head[^>]*>.*</head>'siU", "", $str);

       //listed of tags that will not be striped but whose attributes will be (br|b|i, etc)
       $allowed = "";
       //start nuking those suckers. don you just love MS Word's HTML?
       $str = preg_replace("/<((?!\/?($allowed)\b)[^>]*>)/xis", "", $str);
       $str = preg_replace("/<($allowed).*?>/i", "<\\1>", $str);
   }
   return mysql_escape_string($str);
}

// THIS FUNCTION READS THE $dir AND RETURNS ALL FOLDERS WITHIN IT AS AN ARRAY
function directory($dir) {
   $handle = opendir($dir);
   if (!$handle) {
       return false;
   }
   $res = array();

   while ($directory = readdir($handle)) {
       // See if $directory is a folder
       if(is_dir($dir.$directory)) {
           if ($directory != "." && $directory != "..") {
               $res[] = $directory;
           }
       }
   }
   closedir($handle);
   return $res;
}

$filesRootFolder = "C:/filer";

// If a folder is set
if (isset($_GET['mappe']) && !empty($_GET['mappe'])) {
   $mappe = realsafehtml($_GET['mappe']);
   // Check for "dangerous" input, if so, set to default folder (also if folder doesn't exist
   if ((strpos($mappe, "..") >  -1) || (strpos($mappe, "://") > -1) || (!is_dir($filesRootFolder . $mappe))) {
       $mappe = $filesRootFolder;
   }
   // Set to correct folder if nothing "bad"
   else {
       $mappe = $filesRootFolder . $mappe . "/";
   }
}
else {
   $mappe = $filesRootFolder;
}

// Array
$mapper = directory($mappe);

Endret av ZoRaC
Lenke til kommentar
Videoannonse
Annonse

realsafehtml() er en funksjon jeg fant blant kommentarene på PHP.net...

Så vidt jeg vet, så fjerner denne ALLE tags:

//listed of tags that will not be striped but whose attributes will be (br|b|i, etc)
      $allowed = "";
      //start nuking those suckers. don you just love MS Word's HTML?
      $str = preg_replace("/<((?!\/?($allowed)\b)[^>]*>)/xis", "", $str);
      $str = preg_replace("/<($allowed).*?>/i", "<\\1>", $str);

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...