Encrypted downloaden met PHP

Status
Niet open voor verdere reacties.

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



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);
    }
}
 
Als je stream via je SSL verbinding gaat is die inderdaad versleuteld. Let wel op dat je script binnen de scope van je SSL verbinding valt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan