|
|
Les problèmes de sécurité avec PHPSi votre site web utilise PHP et éventuellement une base de données MySQL alors vous devez connaître les principales failles de sécurité de PHP comme l'injection SQL, les failles XSS, les failles d'include, les failles de sessions et les failles d'upload. Lorsque vous codez un site web en PHP ou autre, vous devez être conscient des failles de sécurité qui existent. Une faille de sécurité est une vulnérabilité dans votre • Le nom : $_FILES['avatar']['name'], • Le chemin du fichier temporaire :$_FILES['avatar']['tmp_name'], • La taille (peu fiable, dépend du navigateur) :$_FILES['avatar']['size'], • Le type MIME (peu fiable, dépend du navigateur) : $_FILES['avatar']['type'], • Un code d'erreur si besoin : $_FILES['avatar']['error']. Ces variables nous seront très utiles pour effectuer nos tests. Maintenant que le sujet est introduit, nous allons voir les problèmes que posent les formulaires d'upload. Par exemple, si vous ne contrôlez pas l'extension du fichier uploadé, le visiteur peut très bien envoyer un fichier .php ou autre permettant de récupérer des informations sensibles sur votre serveur. Pour cela, nous allons appliquer une simple condition couplée à la fonction strrchr (cette fonction permet de récupérer l'extension d'un fichier, comme par exemple .gif) permettant de vérifier si le fichier uploadé a bien l'extension .jpeg, .jpg, .gif ou .png ou autre que vous aurez spécifié dans un tableau. Vous devez également vérifier que le nom du fichier ne contienne pas de caractères spéciaux. Un visiteur mal intentionné ayant uploadé une image avec un nom du type essai.php/0.png, pourrait via les fonctions fopen, fwrite et fclose exécuter du code php au travers de l'image. Pour cela, on va utiliser les expressions régulières couplées à la fonctions preg_match pour vérifier que le nom du fichier ne contient pas de caractères spéciaux, de backslash et de slash. Le Listing 1 vous montre comment sécuriser votre code. Deuxième problème avec l'upload de fichiers en php, la taille du fichier. Même si une taille maximale est spécifiée dans le php.ini pour éviter tout problème sur le serveur, il est préférable de vérifier si la taille du fichier est acceptable pour notre script. Pour cela, on utilise la variable $_FILES['fichier']['tmp_name'] que l'on passe en paramètre à la fonction filesize() pour récupérer la taille du fichier que le visiteur souhaite uploader. On déclare ensuite une variable contenant la taille maximale acceptée (en octets) et on la compare à filesize($_FILES['fichier']['tmp_name']). Si la variable est inférieure au résultat de la fonction alors on peut continuer le script (Listing 2). Une fois ces deux tests effectués, vous pouvez utiliser la fonction move_uploaded_file pour déplacer le fichier du visiteur dans le répertoire spécifié en paramètre. Lire la suite de l'article sur PhpSolMag
Dernière mise à jour: 26/10/2009 - 11:14 AM
|