web-dev-qa-db-fra.com

Comment enregistrer les fichiers téléchargés par l'utilisateur en dehors du dossier Web, mais les utiliser sur ma page?

J'ai lu que l'une des meilleures choses à faire pour la sécurité avec les fichiers téléchargés par l'utilisateur est de les stocker en dehors du dossier Web, car vous ne pouvez pratiquement rien faire pour vous assurer que l'image jpg que l'utilisateur télécharge est réellement un téléchargement ( MIME peut être falsifié, etc.)

Je n'ai toutefois pas vu de bon tutoriel sur la manière d'atteindre cet objectif. J'ai géré l'hébergement sur une boîte Linux, et mon dossier Web est /public_html/, alors comment puis-je enregistrer des fichiers sur /useruploads/ tout en conservant les fichiers avec PHP/html?

3
Chris Sobolewski

Mettez les fichiers en dehors de la racine Web. Ensuite, en utilisant PHP, transmettez le fichier via un script.

Exemple de PHP:

<?php
    $file = '/full/path/to/useruploads/secret.pdf';

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
?>
2
John Conde