2016-05-24 10 views
0

Mein Client fragte mich, eine Website zu machen, wo ein Benutzer einen Pfad auf der Maschine eingeben kann, sollte PHP den Pfad scannen und laden Sie alle Mediendateien im Verzeichnis und Unterverzeichnissen. Der Benutzer kann außerhalb des Stammverzeichnisses beliebige Pfade, Desktops oder externe Laufwerke eingeben. Das ist, was der Kunde will und er läuft unter Linux.Zugriff auf Dateien außerhalb der root Regie

ich ihm sagte, PHP kann nicht auf Dateien zugreifen außerhalb der Wurzel, sagte er ja es kann, er sagte, ich einen Proxy-Server verwenden sollte und er schickte mir dieses Skript

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<?PHP 
session_start(); 
function getFileList($dir) 
    { 
    // array to hold return value 
    $retval = array(); 

    // add trailing slash if missing 
    if(substr($dir, -1) != "/") $dir .= "/"; 

    // open pointer to directory and read list of files 
    $d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading"); 
    while(false !== ($entry = $d->read())) { 
     // skip hidden files 
     if($entry[0] == ".") continue; 
     if(is_dir("$dir$entry")) { 
     $retval[] = array(
      "name" => "$entry/" 
     ); 
     } elseif(is_readable("$dir$entry")) { 
     $retval[] = array(
      "name" => "$entry" 
     ); 
     } 
    } 
    $d->close(); 

    return $retval; 
    } 
$dirlist = getFileList("F:\uni\M2\Thesis\hmayed\ali\songs wav"); 

    // output file list in HTML TABLE format 
    echo "<table border=\"1\">\n"; 
    echo "<thead>\n"; 
    echo "<tr><th>Name</th></tr>\n"; 
    echo "</thead>\n"; 
    echo "<tbody>\n"; 
    foreach($dirlist as $file) { 
    echo "<form action=\"MusicP.php\" Method = \"POST\" \">\n"; 

    echo "<input value =\" F:\\uni\\M2\\Thesis\\hmayed\\ali\\songs wav\\{$file['name']}\" type = \"submit\" name= \"submit\" id=\"{$file['name']}\">\n"; 

    echo "</tr>\n"; 
    } 
    echo "</form>\n"; 
    echo "</table>\n\n"; 


?> 
<audio src = "File:///F:\uni\M2\Thesis\songs\1.mp3" type= "audio/mp3" controls> 
Your browser does not support the audio element. 
</audio> 

<body> 
</body> 
</html> 

meine Fragen so:

  • Funktioniert dieses Skript oder diese Art von Skripten? Ist das Projekt machbar?
  • Und was passiert, wenn ich einen virtuellen Apache-Server zu / erstellen würde es das gesamte Dateisystem lesen? Ich habe es noch nie ausprobiert.
+1

Beide Ansätze sind möglich, beide sind gleichermaßen verunsichert. Das einzige, was zu technischen Problemen führen wird, sind Dateisystemberechtigungen. Mit Erweiterungen wie 'sudo' kann man das auch umgehen, aber die Dinge werden offensichtlich noch unsicherer. Zum Beispiel das Lesen der Passwörter für die Systemkonten. Keine gute Sache, oder? – arkascha

+0

@arkascha er macht gerade eine demonstration auf raspberry pi, keine sorge über die sicherheit – Lynob

+1

Ich sehe nicht, warum man sich nicht um die sicherheit kümmern sollte. Ich würde nicht so einen Zombie in meinem Netzwerk haben wollen. Aber wenn Sie darauf bestehen ... Dürfen wir Sie bitten, die URL auf dem System zu veröffentlichen? Wir alle möchten es benutzen ... – arkascha

Antwort

2

Sie könnten ein PHP-Skript-Proxy an einen Shell-Befehl verwenden, um eine Dateiliste zu bekommen:

<?php 

print nl2br(shell_exec('find /tmp')); 

Ersetzen/tmp in dem obigen Beispiel mit einem Benutzerwert beigetragen.

Ferner Mediendateien spielen Sie so etwas wie die folgende (bitte beachten Sie die Sicherheitsfolgen) tun könnte:

<?php 

$file = isset($_GET['file']) ? $_GET['file'] : null; 

if($file) serve_file($file); 

function serve_file($file) { 
    header('Content-Type: audio/mpeg'); 
    readfile($file); 
    exit; 
} 

$dir = '/tmp'; 
$music = shell_exec("find $dir -name '*.mp3'"); 
$music = explode("\n", $music); 
$music = array_filter($music); 

// html here... 

foreach($music as $file) {?> 
    <a href="?file=<?php echo urlencode($file) ?>"><?php echo $file; ?></a><br /> 
<? 
} 
+0

Werde es versuchen, vielen Dank – Lynob

+0

sagen, dass ich gefunden habe, 'mp3s zu finden, wie man sie in eine PHP-Liste zu laden, so dass ich sie in einem JQuery-Player spielen konnte? oder schlagen Sie vor, mplayer zu benutzen? – Lynob

+0

@Lynob das ist eine andere Frage. Entschuldigung, ich habe diesen Teil verpasst. – Progrock