2010-07-28 7 views
3

Je travaille sur un projet qui nécessite des uploads de fichiers. Je veux m'assurer que c'est sécurisé et que seuls les fichiers PDF sont téléchargés. Je vérifie déjà l'extension de fichier mais je veux m'assurer que le fichier est vraiment un fichier pdf.Vérification du type mime de fichiers pdf en upload en PHP

Quelle est la meilleure façon de vérifier le type mime en php? J'utilise PHP 5.2.5 et n'arrive pas à faire fonctionner fileinfo ou mime_content_type().

pour fileinfo je continue à obtenir ceci:

Warning: finfo_open() [function.finfo-open]: Failed to load magic database 
at '(null)'. in [snipped filename] on line 35 
+0

Pourquoi ne pas Fileinfo/travail mime_content_type? –

Répondre

5

types MIME ne sont pas fiables pour vérifier le type de fichiers. Le navigateur d'un client peut le signaler à tort.

Vérifiez pour Magic Number. Les fichiers PDF commencent par "% PDF" (25 50 44 46).

+0

lire le type mime de la variable $ _FILE l'obtiendrait du navigateur. c'est ce que je faisais. Ce que je veux faire est de lire l'en-tête du fichier pour voir s'il s'agit vraiment d'un fichier pdf. – Samuel

+0

Oui. C'est ce qui est suggéré ici. – recursive

+0

@recursive pour l'enregistrement, la deuxième ligne de cette réponse n'était pas là quand j'ai posté le commentaire. – Samuel

-2

Un moyen facile d'obtenir le type MIME est directement à partir de $ _FILES. Si le type mime contient le mot 'pdf', vous pouvez le considérer comme un PDF valide.

$contentType = $_FILES['myFile']['type']; 
if(isValidPDF($contentType)) { 
    die('It is a PDF'); 
} else { 
    die('It is not a PDF'); 
} 

function isValidPDF($mime) { 
    return strpos($mime, 'pdf') !== false; 
} 
+0

Ceci est une méthode non sécurisée. $ _FILES get c'est le type mime du navigateur et non le fichier lui-même. – buggedcom

1

En effet, ce type MIME ne sont pas la meilleure façon de faire en sorte qu'un utilisateur a téléchargé un fichier valide car cela peut être facilement truquées si vous savez comment.

Mais quand le fichier est affiché, vous pouvez toujours vérifier le type mime de cette façon:

$Type = $_FILES['someFile']['type']; 

Peut-être que vous pourriez utiliser une classe php pour déterminer c'est une chose PDF valide comme FPDF (http://www.fpdf.org/)

Eh bien, bonne chance de toute façon :)

1

Cela signifie probablement que la variable d'environnement MAGIC n'est pas définie, et votre fichier magique n'est pas à/usr/share/misc/magic. Soit définir la valeur de MAGIC pour pointer vers le fichier magique correct, ou passer le fichier magique comme second paramètre à votre constructeur finfo

$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic"); 

ou

$finfo = finfo_open(FILEINFO_MIME, "/usr/share/misc/magic");