ger@ld
Gebruiker
- Lid geworden
- 27 aug 2006
- Berichten
- 235
Ik heb een simpele functie gemaakt die ik kan gebruiken om bestanden te (laten) downloaden van een server. Hiervoor maak ik gebruik van de PHP functionaliteit fopen, fread en feof en wat http headers. (zie code onderaan)
Het is niet een erg veilige oplossing volgens mij. Iedereen kan in principe zien wat er gedownload wordt (toch?). Inmiddels gebruik ik https op mijn server, zodat de datastroom beveiligd is.
Nu vroeg ik me af of met deze methode van downloaden ook de bestanden die gedownload worden encrypted zijn, of alleen de code van het script (misschien is het een hele domme vraag, maar als dit niet het geval is kan ik beter een andere oplossing zoeken!).
Alvast bedankt voor de hulp.
Vr. Gr.,
Gerald
Het is niet een erg veilige oplossing volgens mij. Iedereen kan in principe zien wat er gedownload wordt (toch?). Inmiddels gebruik ik https op mijn server, zodat de datastroom beveiligd is.
Nu vroeg ik me af of met deze methode van downloaden ook de bestanden die gedownload worden encrypted zijn, of alleen de code van het script (misschien is het een hele domme vraag, maar als dit niet het geval is kan ik beter een andere oplossing zoeken!).
Alvast bedankt voor de hulp.
Vr. Gr.,
Gerald
PHP:
function downloadFile($downloadEnc) {
//get folder contents, or give error
//$downloadEnc contains encrypted filename
if ($handle = opendir(DOWNLOADFOLDER)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && !is_dir(DOWNLOADFOLDER . $entry)) {
$folderEntries[sha1($entry)] = $entry;
}
}
//compare $_GET argument with folder content
if (in_array($downloadEnc, array_keys($folderEntries))) {
//download file allowed
$fullPath = DOWNLOADFOLDER . $folderEntries[$downloadEnc];
if ($fh = fopen($fullPath, 'r')) {
//Opened file successfully
$fileSize = filesize($fullPath);
$pathParts = pathinfo($fullPath);
//echo "<p><pre>";var_dump($pathParts);echo "</pre></p>";
header("Content-type: application/force-download");
header("Content-Disposition: filename=\"" . $pathParts["basename"] . "\""
);
header("Content-length: $fileSize");
header("Cache-control: private");
while (!feof($fh)) {
$buffer = fread($fh, 2048);
echo $buffer;
}
fclose($fh);
return;
} else {
echo "<p>Opening file failed!</p>";
exit(1);
}
} else {
echo "<p>File not found.</p>";
}
} else {
echo "<p>Opening folder failed.</p>";
exit(1);
}
}