j'ai un problème avec ce script qui a été extrait du cours protégez vous contre les failles web.
$nom ='image.jpg';
$handle = fopen($nom, 'r');
if ($handle) {
while (!feof($handle) AND $error == 0) {
$buffer = fgets($handle);
switch (true) {
case strstr($buffer, '<'):
$error = true;
break;
case strstr($buffer,'>'):
$error += 1;
break;
}
}
}
fclose($handle);
if ($error == true) {
unlink($nom);
}
?>
En effet ce scripte php a pour but de vérifier si une image contient du code et de le supprimer. Mais je n'ai pas ce résultat, même les images qui ne contiennent pas de code php sont supprimés. quelqu'un peut-il m'expliquer le pourquoi , ou me proposer une autre solution pour lutter contre la faille upload?
Une solution intéressante serait aussi de bien configurer ton serveur web. Si tu acceptes des fichiers provenant des utilisateurs, tu devrais systématiquement penser à ceci :
Mettre les fichiers dans un endroit isolé;
Mettre les bons chmods aux dossiers contenant les fichiers;
Voir à configurer Nginx, Apache, IIS (ou autre) afin de ne pas autoriser de code PHP à être exécuté dans ces dossiers;
Aller plus loin dans cette dernière configuration et forcer un type mime selon l'extension du fichier demandé;
Ensuite, au niveau de l'application, il est vrai qu'il faut faire plusieurs contrôles :
L'extension du fichier est-elle reconnu ?
Le type mime est-il ce que je m'attends à recevoir ?
Est-ce que l'image recréé à l'aide d'outil comme Imagick permet d'obtenir la même image ?
etc.
Plus largement, on pourrait ajouter une couche de sécurité, avant même que l'utilisateur ne charge la page. Cela servirait à éviter qu'un utilisateur tente de briser la sécurité via des scripts exécuté en CURL :
Le user_agent de l'utilisateur fait-il du sens ?
Est-ce que le referer est possible ?
Est-ce que des cookies sont passés dans la requêtes ? Est-ce qu'il doit y en avoir ?
Est-ce qu'un captcha est envoyé (ou tout autre champ essentiel) en même temps que l'upload ?
etc.
L'idée ici est de prévenir au maximum ce qui entre sur ton serveur. En effet, avant que PHP n'analyse le fichier, dis-toi qu'il a été uploadé sur le serveur dans un dossier temporaire. Cela pourrait donner quelques risques si on combine plusieurs failles à la fois.
Après la mise en oeuvre de la solution de l'article nullcandy.com, j'ai constaté que le .htaccess bloque l'affichage des images au niveau de la page html. voici le code du .htaccess:
Dans le dossier qui contient les images comme le dossier upload/. Et le script php crée dans ce dossier un sous dossier avec l'id de l'utilisateur dans lequel il upload les images.
la faille upload
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Développeur PHP | https://www.phptuto.com | https://www.minnesbook.com